Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

курсор със sp_executesql и параметри

Мисля, че това ще свърши работа (и ето демонстрация на живо ):

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 - предполагам, че не харесвам курсорите толкова много :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличане на дата в sql сървър, CURRENT_TIMESTAMP срещу GetDate()

  2. Rails &MSSQL 2008 – Ще ударим ли бариери?

  3. Какъв е правилният начин за попълване на DropDownList от база данни?

  4. SQL Server - Как да записвам променливи и резултати от заявка в текстов файл?

  5. Hibernate (/JPA) страниране от страна на сървъра и MS SQL Server