Я прошу прощения, если это спросили, и я должен дурак, чтобы ухватиться за ответ.
Я пытаюсь определить лучший способ сделать следующее:
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,','')
, чтобы исправить это, но, похоже, это мне не помогло.
Идеи, пожалуйста?