sql >> データベース >  >> RDS >> Sqlserver

sp_executesql クエリを実行すると、パラメーター @statement が必要になります

    "sp_executesql" ストアド プロシージャは、単一の文字列パラメーター @statement の実行を想定しています。

    あなたの文字列はここで完全に狂っています.....「固定」文字列部分の前に N'......' を付けて Unicode 文字列にする必要がありますが、これは間違いなくここでは適切ではありません。

    これを試してみたいと思うかもしれません:

    DECLARE @a INT 
    DECLARE @b VARCHAR(2)
    
    SET @a = 1
    
    DECLARE @statement NVARCHAR(500)
    
    WHILE @a < 30
    BEGIN
        SET @b = CAST(@a AS VARCHAR(2))
    
        SET @statement = 
            N'update source_temp set pmt_90_day = pmt_90_day + ' + 
                 'convert(money, ''trans_total_' + @b + ''') ' + 
                 'where convert(datetime, ''effective_date_' + @b + ''')' +
                 ' <= DATEADD(DAY, 90, ORSA_CHARGE_OFF_DATE) ' +
                 'and DRC_FLAG_' + @b + ' = ''C'''
    
        exec sp_executesql @statement
    
        SET @a = @a + 1
    END
    

    これは機能し、期待どおりの動作をしますか??

    説明:N'..........' は、SQL ステートメントを含むストリング全体を区切ります。複製 (「エスケープ」) する必要がある内部のアポストロフィ。あなたの論理を正しく理解できたと思います.

    マーク



    1. SQLによるテーブルの依存関係の作成

    2. 遅いMySQL挿入

    3. MySQLシャーディングアプローチ?

    4. PHP、PDO、MySQL、注意:非オブジェクトのプロパティを取得しようとしています