我有一个接受三个参数的存储过程。
是否可以使用查询作为输入调用此存储过程?
例如,我有tableA
。
SELECT * FROM TABLEA
| A | B | C |
|---+---+---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
现在,有没有办法可以致电
EXEC sp_name (SELECT * FROM TABLEA)
这样存储过程会为每一行执行吗?
我的理由是我有一个需要为多行调用的存储过程。我可以编写一个脚本来执行此操作,但想知道是否可以使用TSQL执行此操作。
答案 0 :(得分:1)
实现此目的的最佳方法是将第二个存储过程创建为用户定义的函数。然后你可以用这种方式调用它:
SELECT *
FROM TableA
CROSS APPLY dbo.yourUserFunction(column1, column2, etc)
或者,可能有一种方法可以将两个存储过程合并到一个集合中,但我必须看到你正在调用的第二个存储过程。
答案 1 :(得分:1)
此解决方案假设T-SQL在SQL SERVER 2008及更高版本上运行
创建表类型变量,这只需要执行一次
USE YOURDBNAME;
走
Create TYPE TableAType as Table
(A int null,B int null, C int null);
这将在您当前使用的DB中的用户定义表类型中创建表类型变量。
在您的存储过程中,声明此表类型的变量。并使用表A中的内容填充它。示例:
Create Procedure MyStoredProcedure1 AS Declare @TableB as TableAType;
Insert into @TableB(A,B,C) Select A,B,C from TableA;
创建主存储过程
Create Procedure MyStoredProcedure2
@TVP TableAType READONLY
as
EXEC sp_Name @TVP;
这应该为你做的工作, 如需进一步参考,请参阅下面的链接# http://msdn.microsoft.com/en-us/library/bb510489%28v=sql.105%29.aspx
答案 2 :(得分:0)
从技术上讲,是的,但你对sproc的调用格式很糟糕。
Exec sp_name 'SELECT * FROM TABLEA'
或
Exec sp_name @sql1 = 'SELECT * FROM TABLEA'
那就是说,你要做的事可能不是一个好主意。