SQL - 对表中的所有值执行存储过程

时间:2012-10-31 16:20:15

标签: sql sql-server stored-procedures

我有一个SQL存储过程'A',用于验证给定帐户的某些银行帐户信息,并接受帐号作为参数'arg1'

我想对另一个表 XXX 第X列中的所有值执行此过程(所有银行帐户都显示在“帐户”表中)

我不确定这样的事情是否有效

exec A @arg1 = X from XXX

提前致谢!

3 个答案:

答案 0 :(得分:11)

不存在您想要运行它的批量EXEC。

选项1:手动生成并运行。复制结果,粘贴回SSMS并执行。

select 'exec A @arg1 = ' + quotename(X,'''') + ';'
from XXX

选项2:生成批处理并使用动态SQL运行。

declare @sql nvarchar(max);
set @sql = '';
select @sql = @sql + 'exec A @arg1 = ' + quotename(X,'''') + ';'
from XXX;
exec (@sql);

选项3:循环运行

declare @x varchar(max);
select top(1) @x = X from xxx where X is not null order by X;
while @@rowcount > 0
begin
    exec sp_executesql N'exec A @arg1=@x;', N'@x varchar(max)', @x=@x;
    select top(1) @x = X from xxx where X > @x order by X;
end;

答案 1 :(得分:2)

通常以基于集合的方式处理事物通常会更好,但如果您确实需要为结果集中的每一行按顺序执行某些操作,那么您可以使用游标:

declare cur cursor for
select X from XXX

declare @x int
open cur
fetch next from cur into @x

while @@FETCH_STATUS = 0
BEGIN
    exec A @x

    fetch next from cur into @x
END

答案 2 :(得分:0)

尝试使用带Coalesce命令的动态查询。下面的查询对XXX表的X列数据执行存储过程。

{{1}}