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

Spuštění dotazu sp_executesql očekává parametr @statement

Uložený proces "sp_executesql" očekává, že se provede jeden řetězec parametru @statement.

Váš řetězec je zde úplně mimo... musíte před každou "pevnou" část řetězce přidat N'......', abyste z nich udělali řetězce Unicode, ale v tomto případě to rozhodně neplatí.

Myslím, že byste mohli zkusit toto:

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

Funguje to a dělá to, co očekáváte?

Vysvětlení:N'.........' ohraničuje celý řetězec, který obsahuje příkaz SQL. Jakýkoli apostrof uvnitř, který musí být duplikován ("unikl"). Doufám, že jsem správně pochopil vaši logiku.

Marc



  1. Odstranit řádek v mysql a přidružený ze složky

  2. Výběr všech polí kromě pouze jednoho pole v mysql

  3. Syntaxe pro row_to_json s sqlalchemy

  4. Hledejte ve 300 milionech adres pomocí pg_trgm