sql >> Databáze >  >> RDS >> Sqlserver

kurzor s sp_executesql a parametry

Myslím, že to udělá svou práci (a zde je živá ukázka ):

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

Kurzor jsem úplně odstranil a místo něj použil smyčku while - asi nemám kurzory moc rád :-)



  1. PHP/SQL databáze dotazování osvědčených postupů a zabezpečení

  2. Escaping hstore obsahuje operátory v příkazu JDBC Prepared

  3. Jak změnit všechny sloupce SQL jednoho datového typu na jiný

  4. Seznamte se s Michalem Barem a mnou na Microsoft Ignite!