2013-05-29 4 views
1

Я готовлю SQL пакетный сценарий, как этотРазличные среды после команды EXEC

DECLARE @DateRateizzazionePerSA nvarchar(2000) 
DECLARE @query nvarchar(3000) 

SET @query = 'SELECT @DateRateizzazionePerSA = COALESCE(@DateRateizzazionePerSA+ '', '', '''') + a.RataStr FROM (SELECT DISTINCT RataStr =' 
      +' . . . ' 

EXEC(@query) 

Как вы можете видеть, я объявил DateRateizzazionePerSA но Название переменной этот шаг невидимым для EXEC команды, так как я получаю ошибка:

Must declare the scalar variable "@DateRateizzazionePerSA".

Что я могу сделать? Похоже, что среда EXEC не знает внешней среды. Isnt'it?

+0

возможно дубликат [Использование значения переменной в строке при выполнении EXEC в SQL] (http://stackoverflow.com/questions/11052749/using-variable-value-in-string-when-executing-exec- in-sql) – Pondlife

ответ

1

sp_executeSQL может использоваться для обмена данными между областями;

DECLARE @DateRateizzazionePerSA nvarchar(2000) = 'Foo' 
DECLARE @query nvarchar(3000) 

SET @query = 'SELECT @DateRateizzazionePerSA += ''Bar''' 

EXEC sp_executeSQL @query, 
    N'@DateRateizzazionePerSA nvarchar(2000) OUTPUT', 
    @DateRateizzazionePerSA OUTPUT 

SELECT @DateRateizzazionePerSA 

== 'FooBar' 
0

Вам нужно сбежать из текстовой строки, чтобы передать переменную в запрос. «SELECT» + @ DateRateizzazionePerSA +

DECLARE @DateRateizzazionePerSA nvarchar(2000) 
DECLARE @query nvarchar(3000) 

SET @query = 'SELECT '[email protected]+ '= COALESCE('[email protected]+ '+ '', '', '''') + a.RataStr FROM (SELECT DISTINCT RataStr =' 
      +' . . . ' 

EXEC(@query) 

Как это было, переменная не оценивается, а строка, которая будет выполнена, казалось, просто новую переменную внутри него.

Одна вещь, которую я хотел бы сделать, чтобы помочь устранить динамический sql, - это изменить EXEC (@query) на PRINT (@query), что позволит вам увидеть, как будет выполняться переменная запроса.

+0

Не нужно оценивать эту переменную. Процесс оценки находится рядом с параметром @query –

+0

А, я неправильно понял проблему. –

Смежные вопросы