Программируемое создание переменных для использования с операторами IN - PullRequest
0 голосов
/ 09 августа 2010

Пожалуйста, рассмотрите следующие сценарии.

Создать таблицу:

IF OBJECT_ID('Colortable') IS NOT NULL
  DROP TABLE ColorTable

CREATE TABLE Colortable (Color VARCHAR(32))
GO

Вставить некоторые значения:

SET  NOCOUNT ON

INSERT Colortable
  SELECT 'red'

INSERT Colortable
  SELECT 'orange'

INSERT Colortable
  SELECT 'blue'

INSERT Colortable
  SELECT 'green'
GO

Создать мою переменную (которая станет параметром в SSRS) автоматически:

DECLARE @colors VARCHAR (1024)

SELECT @colors =
         COALESCE(
           @colors + '''' + ',' + '''', '') +
         Color
FROM Colortable

Когда я использую «Select @colors», я получаю следующее:

'red','orange','blue','green'

Однако мои запросы не работают должным образом.

SELECT *
FROM colortable
WHERE Color IN ('red', 'orange', 'blue', 'green') -- Returns 4 rows. 


SELECT *
FROM colortable
WHERE Color IN (@colors) -- Returns 0 Rows

Может кто-нибудь сказать мне, почему?Я пытаюсь сгенерировать строку значений, чтобы этот скрипт работал в SSRS и SSMS (или любом другом инструменте, который я использую).

Ответы [ 2 ]

1 голос
/ 09 августа 2010

я думаю, что вы можете использовать sp_executesql может работать для вас

1 голос
/ 09 августа 2010

@ colors - это отдельный varchar, а не список varchar. Вместо этого вы можете вставить свои значения во временную таблицу и объединиться против этого.

...