これでうまくいくと思います(ライブデモ はこちら) ):
declare @id int, @sql nvarchar(max), @last_result nvarchar(100), @last_runtime datetime, @params nvarchar(max); SET @params = N'@retvalOUT varchar(max) OUTPUT'; select @id = min(id) from Test_Run; while @id is not null begin select @sql = Script from Test_Run where id = @id; set @sql = 'select @retvalOUT= (' + @sql + ')'; exec sp_executesql @sql, @params, @retvalOUT = @last_result OUTPUT; set @last_runtime = getdate(); update Test_Run set Last_Result = @last_result, Last_Runtime = @last_runtime where id = @id; select @id = min(id) from Test_Run where id > @id; end
プレ>私はカーソルを完全に削除し、代わりに while ループを使用しました - 私はカーソルがあまり好きではないと思います :-)