我有驗證一定的銀行帳戶信息對於給定帳戶SQL存儲過程「A」和它接受帳戶號碼作爲參數「ARG1」SQL - 在表中執行的存儲過程對於所有的值
我要執行的程序,我不知道目前在列中的另一臺XXXX(所有銀行賬戶出現在賬戶表)
所有的值,如果這樣的事情會工作
exec A @arg1 = X from XXX
在此先感謝!
我有驗證一定的銀行帳戶信息對於給定帳戶SQL存儲過程「A」和它接受帳戶號碼作爲參數「ARG1」SQL - 在表中執行的存儲過程對於所有的值
我要執行的程序,我不知道目前在列中的另一臺XXXX(所有銀行賬戶出現在賬戶表)
所有的值,如果這樣的事情會工作
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);
方案三:在一個循環中
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 @[email protected];', N'@x varchar(max)', @[email protected];
select top(1) @x = X from xxx where X > @x order by X;
end;
謝謝,循環解決方案做我在找什麼 – dopplesoldner
選項1爲我做了。 +1 –
這是通常更接近事物在基於集合的方式運行,但如果你真的需要爲在每一行做順序的東西結果集,以下是如何使用光標:
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
我需要做同樣的事情:對錶中每行的值運行存儲過程。以基於集合的方式思考這個問題的方法是什麼? – bernie2436
@ akh2103這真的取決於你的sproc的功能。您可能可以根據相關的更新,刪除或插入來重寫它。如果它包含變量,則用表變量替換它們。或者它可能不可行或值得付出努力。 – Chad
「A」的目的是什麼?這聽起來像你試圖通常是一個否定的光標。你能詳細說明你的前/後數據是/應該是什麼嗎? – Bmo
http://stackoverflow.com/questions/1656804/sql-call-stored-procedure-for-each-row-without-using-a-cursor – jazzytomato
看看TVF + CROSS APPLY是否有幫助http://stackoverflow.com/questions/477064/is-it-it-it-it-it-it-the-execution-a-stored-procedure-a-set-without-use-a-cursor –