2

特定の口座の特定の銀行口座情報を検証するSQLストアドプロシージャ「A」があり、引数「arg1」として口座番号を受け入れます。

別のテーブルXXXの列Xにあるすべての値(Accountsテーブルにあるすべての銀行口座)に対してプロシージャを実行したい

このようなものがうまくいくかどうかはわかりません

exec A @arg1 = X from XXX

前もって感謝します!

4

3 に答える 3

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;
于 2012-10-31T16:22:50.990 に答える
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
于 2012-10-31T16:27:51.807 に答える
0

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)
于 2018-05-25T22:02:34.443 に答える