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

标签 sql sql-server tsql stored-procedures

假设我有一个存储过程:

exec my_sp ?,?

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

exec my_sp 'value 1','value 2'

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

例如我有一张 table

1  |  2
aa   bb
cc   dd

等等……

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

exec my_sp 'aa','bb'

exec my_sp 'cc','dd'

等等…………

我怎样才能做到这一点?

最佳答案

我建议您更改程序以接受表类型作为输入参数而不是变量

然后您可以一次性将表中的所有值传递给过程,并完成过程中所有行的操作。

创建表类型

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 循环将每一行作为输入传递给您的过程,强烈不建议这样做。

关于sql - T SQL - 通过存储过程传递表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35607875/

相关文章:

sql-server - nvarchar(MAX) 最多可容纳多少个字符?

SQL Server : Where condition based on the parameters

sql - SQL Server 中范围变量的范围

java - JPQL 检查日期之间是否有空房

sql - 可修改的连接 View 是合理的设计选择吗?

mysql - SQL中如何添加主键?

SQL Server 2008 分解 XML

MySQL 在单个资源 ID 上连接 3 个表

c# - 仅在 EF Core 中的 Scaffold-DbContext 存储过程

c# - 如何对可以取消的 DataTable 操作执行 SQL 查询