Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

kursor z sp_executesql i parametrami

Myślę, że to załatwi sprawę (a oto demo na żywo ):

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

Całkowicie usunąłem kursor i zamiast tego użyłem pętli while - chyba tak bardzo nie lubię kursorów :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawienie zbiorcze nie powiodło się Błąd konwersji danych zbiorczego ładowania (obcięcie)

  2. Zapytanie SQL, aby uzyskać zagregowany wynik w separatorach przecinków wraz z grupowaniem po kolumnie w SQL Server

  3. Jak zwiększyć dopuszczalny rozmiar załącznika podczas wysyłania wiadomości e-mail w programie SQL Server (T-SQL)

  4. Połącz wartości wierszy T-SQL

  5. Na liście wyboru można podać tylko jedno wyrażenie, gdy podzapytanie nie jest wprowadzone z opcją EXISTS