«Вложенные» переменные в динамическом SQL - как сохранить действительный синтаксис? - PullRequest
0 голосов
/ 05 августа 2011

Я прошу прощения, если это спросили, и я должен дурак, чтобы ухватиться за ответ.

Я пытаюсь определить лучший способ сделать следующее:

Declare @sql nvarchar(4000)
, @Filter nvarchar(500)

SET @filter = 'WHERE value1 IN (''A'',''B'',''C'')'

SET @sql = '
DECLARE @Field nvarchar(50)

DECLARE process CURSOR FOR
SELECT value2
FROM table
'+@filter+'

OPEN process

FETCH NEXT FROM process
INTO @field

WHILE @@Fetch_Status = 0
BEGIN

EXEC stored_procedure
@field = @field
@filter = '+@filter+'

FETCH NEXT FROM process
INTO @field

END

CLOSE process
DEALLOCATE process
' print @sql execute sp_executesql @sql

Проблема здесь в том, что это переводится как

DECLARE @Field nvarchar(50)

DECLARE process CURSOR FOR
SELECT value2
FROM table
WHERE value1 IN ('A','B','C')

OPEN process

FETCH NEXT FROM process
INTO @field

WHILE @@Fetch_Status = 0
BEGIN

EXEC stored_procedure
@field = 'N'
@filter = 'WHERE value1 IN ('A','B','C')'

FETCH NEXT FROM process
INTO @field

END

CLOSE process
DEALLOCATE process

Конечно, это приводит к синтаксической ошибке в A, B и C

Я пробовал несколько вариантов replace(@filter,',''), чтобы исправить это, но, похоже, это мне не помогло.

Идеи, пожалуйста?

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Использование:

replace(@filter,'''','''''')
0 голосов
/ 05 августа 2011

Изменить эту часть

…
EXEC stored_procedure
@field = @field
@filter = '+@filter+'
…

вот так

…
EXEC stored_procedure
@field = @field
@filter = <b>''</b>'+<b>REPLACE(</b>@filter<b>, '''', '''''')</b>+'<b>''</b>
…
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...