sql >> Databasteknik >  >> RDS >> Sqlserver

Att köra sp_executesql-fråga förväntar sig parametern @statement

Den "sp_executesql" lagrade proc förväntar sig att en enstaka strängparameter @statement körs.

Din sträng är helt ur spel här..... du måste prefixa alla "fasta" strängdelar med ett N'......' för att göra dem till Unicode-strängar, men detta är definitivt inte riktigt fallet här.

Jag tror att du kanske vill prova detta:

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

Fungerar detta och gör det det du förväntar dig att det ska göra?

Förklaring:N'.........' avgränsar hela strängen som innehåller SQL-satsen. Alla apostrof inuti som måste dupliceras ("rymt"). Jag hoppas att jag förstod din logik rätt.

Marc



  1. Integrering av SQL Service Broker och NServiceBus

  2. Vilka är skillnaderna mellan CHECKSUM() och BINARY_CHECKSUM() och när/vilka är lämpliga användningsscenarier?

  3. "Måste deklarera den skalära variabeln"-felet när en tabellvärderad parameter skickas till en parametrerad SQL-sats

  4. Mysql använder inte DATETIME-index när tabellen har andra fält