T SQL - 通过存储过程传递表变量

bep*_*ter 2 sql t-sql sql-server stored-procedures

假设我有一个存储过程:

exec my_sp ?,?
Run Code Online (Sandbox Code Playgroud)

我可以通过添加两个值来执行此存储过程,例如

exec my_sp 'value 1','value 2'
Run Code Online (Sandbox Code Playgroud)

现在这就是事情变得棘手......

我有一张桌子

1  |  2
aa   bb
cc   dd
Run Code Online (Sandbox Code Playgroud)

等等.......

现在我想传递我的表值并创建一个结果表,例如

exec my_sp 'aa','bb'

exec my_sp 'cc','dd'
Run Code Online (Sandbox Code Playgroud)

等等..........

我怎样才能做到这一点?

Pரத*_*ீப் 5

我建议你改变你的程序接受table type作为输入参数代替variables.

然后你就可以在你的表通过所有值的过程中的单杆和得到的东西在过程中的所有行完成.

创建表类型

Create type my_sp_param as table (col1 varchar(2),col2 varchar(2))
Run Code Online (Sandbox Code Playgroud)

改变程序

Alter procedure my_sp (@param my_sp_param)
as
..
Run Code Online (Sandbox Code Playgroud)

使用表类型输入调用过程

declare @param my_sp_param 

insert into @param (col1,col2)
select [1],[2] from yourtable

exec my_sp  @param
Run Code Online (Sandbox Code Playgroud)

如果您无法更改过程,则必须使用CURSOR或WHILE循环将每行作为输入传递给您的过程,这是非常不推荐的.