我们说我有一个存储过程:
exec my_sp ?,?
我可以通过添加两个值来执行此存储过程,例如
exec my_sp 'value 1','value 2'
现在这就是事情变得棘手......
我有一张表例如
1 | 2
aa bb
cc dd
依旧.......
现在我想传递我的表值并创建一个结果表,例如。
exec my_sp 'aa','bb'
exec my_sp 'cc','dd'
依旧..........
我怎样才能做到这一点?
答案 0 :(得分:5)
我建议您更改您的程序以接受table type
作为输入参数而不是variables
。
然后,您可以一次性将表中的所有值传递给过程,并为过程中的所有行完成操作。
创建表格类型
Create type my_sp_param as table (col1 varchar(2),col2 varchar(2))
更改程序
Alter procedure my_sp (@param my_sp_param)
as
..
使用表类型输入
调用该过程declare @param my_sp_param
insert into @param (col1,col2)
select [1],[2] from yourtable
exec my_sp @param
如果您无法更改过程,则必须使用CURSOR或WHILE循环将每行作为输入传递给您的过程,这是非常不推荐的。
答案 1 :(得分:2)
最简单的方法(不幸的是)通过CURSOR
。为了理智,我将问题中的列从1
和2
重命名为A
和B
。
Declare @c_a varchar (10),
@c_b varchar (10)
Declare cur Cursor For
(
Select A, B
From YourTable
)
Open cur
While (1 = 1)
Begin
Fetch Next From cur Into @c_a, @c_b
If (@@Fetch_Status <> 0) Break
Execute my_sp @c_a, @c_b
End
Close cur
Deallocate cur