[英]SQL - Execute stored procedure for all values in a table
我有一個SQL存儲過程'A' ,它驗證給定帳戶的某些銀行帳戶信息,並接受帳號作為參數'arg1'
我想對另一個表XXX的 列X中存在的所有值執行該過程(Accounts表中存在的所有銀行帳戶)
我不確定這樣的事情是否有效
exec A @arg1 = X from XXX
提前致謝!
沒有你想要運行它的批量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;
通常以基於集合的方式處理事物更好,但如果您確實需要為結果集中的每一行按順序執行某些操作,那么您可以使用游標:
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
嘗試使用帶Coalesce命令的動態查詢。 下面的查詢對XXX表的X列數據執行存儲過程。
-- Create Dynamic Query
DECLARE @ValidateAccountCommand VARCHAR(MAX)
SELECT @ValidateAccountCommand = COALESCE(@ValidateAccountCommand +
'; EXEC A ',
'EXEC A ')
+ CONVERT(NVARCHAR,XxxData.X)
FROM
(SELECT X FROM XXX) XxxData
PRINT @ValidateAccountCommand
EXECUTE (@ValidateAccountCommand)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.