Sqlserver
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Текущи суми в SQL изглед

  2. Pivot върху обединени таблици SQL Server

  3. Как да генерирам изрази за вмъкване с Sql сървър 2012?

  4. NOT IN срещу NOT EXISTS

  5. Има ли голяма техническа разлика между типовете данни VARBINARY(MAX) и IMAGE?