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. 最高のMySQLDigitalOceanパフォーマンス–ScaleGridとDigitalOceanマネージドデータベース

    2. Laravel Eloquent with()->nullを返す

    3. スマイリーはmysqlutf-8mb4データベースでどのようにエンコードされますか?

    4. SQL Server(T-SQL)で月の名前を月の番号に変換する