【发布时间】:2018-02-22 12:08:38
【问题描述】:
早安,
我正在找出一个遗留程序并遇到了一些问题,这应该很容易,但我无法计算,至少今天不是。
我追求的逻辑是我在 table1 中有值,我希望将其提供给存储过程 proc1 并将结果保存到 Table2强>。
目前这是由不同的用户手动填写填充变量的字符串来调用的。工作语法例如:
exec [dbo].[Proc1] @var1=N'10010015',@var2='2008-03-31 00:00:00', @var3=50000
我尝试了类似的东西
declare var1 varchar, var2 varchar, var3 int
insert into table2 (result1, result2, result3)
Select * from
[dbo].[Proc1] (
select @var1 = var1_tab1,
@var2 = var2_tab1
from table1
)
对于常规函数,我只需按正确顺序输入变量,但该过程需要@var1 格式。而且我不允许更改功能。
以前的尝试只是给了我不正确的语法。任何如何解决此类问题的想法将不胜感激。 .
**编辑:**
是的,它是重复的。或者至少我用另一个来创建解决方案。
写的太多了。太久没读。下面的工作。
我不明白的事情,但现在有道理:
-只要输入与过程定义的顺序相同,您就可以在不显式设置变量的情况下执行过程。
-您可以只将结果插入到表中,因为返回(来自此特定过程)是选择的。
DECLARE @var1 int,
@var2 int,
@var3 float,
@var4 datetime,
DECLARE cur CURSOR FOR SELECT var1, var2, var3, var4 FROM table1
OPEN cur
FETCH NEXT FROM cur INTO @var1, @var2, @var3, @var4
WHILE @@FETCH_STATUS = 0 BEGIN
insert into table2 EXEC [procedure] @var1, @var2, @var3, 0, '', NULL, @var4
FETCH NEXT FROM cur INTO @var1, @var2, @var3, @var4
END
CLOSE cur
DEALLOCATE cur
【问题讨论】:
-
发帖前搜索 - 总是。 Passing columns 将表作为存储过程的参数是一个常见问题,inserting 结果集也是如此。
-
我相信您正在寻找的是与交叉应用一起使用的功能。您不能在 select 语句中调用 SP。试着把你的 SP 写成一个函数。
-
这个SP实际上是做什么的?遍历表中的每一行会很慢。根据它在做什么,使用其他东西可能更容易,比如内联表值函数。虽然不知道
[proc1]做了什么,但我无法提供更多。
标签: sql-server tsql sql-server-2012