Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uruchamianie zapytania sp_executesql oczekuje parametru @instrukcji

Przechowywana procedura "sp_executesql" oczekuje pojedynczego parametru ciągu @instrukcji do wykonania.

Twój ciąg jest tutaj całkowicie nie do zniesienia ..... musisz poprzedzić wszystkie "stałe" części ciągu z N'......', aby uczynić je ciągami Unicode, ale zdecydowanie nie jest to właściwe w tym przypadku.

Myślę, że możesz spróbować tego:

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

Czy to działa i robi to, czego oczekujesz?

Objaśnienie:N'.........' ogranicza cały łańcuch zawierający instrukcję SQL. Każdy apostrof w środku, który musi zostać zduplikowany ("uciekł"). Mam nadzieję, że dobrze zrozumiałem Twoją logikę.

Marek



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć oryginalne ziarno kolumny tożsamości w SQL Server

  2. Co oznacza znak potoku/pionowej kreski w TSQL?

  3. Aby zmienić format daty w sql

  4. Plik mdf programu SQL Server 2005 w 2012 r.

  5. Pobierz ostatnie dziecko z sql hierarchyid