簡體   English   中英

SQL - 對表中的所有值執行存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM