Проверка на вхождение по парамтеру (IN @Parametr)?

Pvase
Дата: 24.04.2015 14:56:18
Подскажите пожалуйста, как сделать чтобы вот такой запрос:
DECLARE @ParamVirma AS VarChar(100)
SET @Param = '''Name1'', ''Name2'''

SELECT        TBase.Id, TBase.Name
FROM            Table AS TBase WITH (NOLOCK) 
WHERE        (TBase.Name IN (@ParamVirma))

возвращал результаты как вот такой без параметра:
SELECT        TBase.Id, TBase.Name
FROM            Table AS TBase WITH (NOLOCK) 
WHERE        (TBase.Name IN ('Name1', 'Name2'))


Спасибо.
Minamoto
Дата: 24.04.2015 14:58:56
Pvase, вот так:

DECLARE @ParamVirma AS VarChar(100)
SET @Param = '''Name1'', ''Name2'''

declare @sql as nvarchar(max);

set @sql = 'SELECT        TBase.Id, TBase.Name
FROM            Table AS TBase WITH (NOLOCK) 
WHERE        (TBase.Name IN (' + @ParamVirma + '))'

exec (@sql)


Это называется "динамический sql".
Glory
Дата: 24.04.2015 14:59:42
Pvase
возвращал результаты как вот такой без параметра:

Надо эти значения передавать как таблицу, а не как строку
Pvase
Дата: 24.04.2015 15:01:10
Pvase,
Извините, правильный первый запрос такой:
DECLARE @ParamVirma AS VarChar(100)
SET @Param = '''Name1'', ''Name2'''

SELECT        TBase.Id, TBase.Name
FROM            Table AS TBase WITH (NOLOCK) 
WHERE        (TBase.Name IN (@Param))

Но вопрос пока не решен.
iap
Дата: 24.04.2015 15:02:33
Pvase
правильный первый запрос такой
правильный, да?
Pvase
Дата: 24.04.2015 15:02:57
Glory,

Как таблицу нельзя, параметр передается из внешней программы "Построителя отчетов" (Reporting Servers), в нем не нашел параметра с типом таблица.
iap
Дата: 24.04.2015 15:05:22
Pvase
Но вопрос пока не решен
Парсить @Param по разделителю,
собирать результат в таблицу (необязательно постоянную, можно функцию тут, на форуме, найти)
и подставлять в IN() подзапрос из этой таблицы, а не скалярную переменную.
Pvase
Дата: 24.04.2015 15:13:59
Minamoto
Pvase, вот так:

DECLARE @ParamVirma AS VarChar(100)
SET @Param = '''Name1'', ''Name2'''

declare @sql as nvarchar(max);

set @sql = 'SELECT        TBase.Id, TBase.Name
FROM            Table AS TBase WITH (NOLOCK) 
WHERE        (TBase.Name IN (' + @ParamVirma + '))'

exec (@sql)


Это называется "динамический sql".


Спасибо, в SSMS работает, а вот из конструктора в SSRS (Reporting Services) выдает ошибку "Необходимо объявить скалярную переменную @ParamVirma". Пробовал напрямую, без переменной @sql - та же самая ошибка. Наверное в SSRS нельзя использовать exec.
msLex
Дата: 24.04.2015 15:33:24
Pvase
Minamoto
Pvase, вот так:

DECLARE @ParamVirma AS VarChar(100)
SET @Param = '''Name1'', ''Name2'''

declare @sql as nvarchar(max);

set @sql = 'SELECT        TBase.Id, TBase.Name
FROM            Table AS TBase WITH (NOLOCK) 
WHERE        (TBase.Name IN (' + @ParamVirma + '))'

exec (@sql)


Это называется "динамический sql".


Спасибо, в SSMS работает, а вот из конструктора в SSRS (Reporting Services) выдает ошибку "Необходимо объявить скалярную переменную @ParamVirma". Пробовал напрямую, без переменной @sql - та же самая ошибка. Наверное в SSRS нельзя использовать exec.

SSRS сам умеет собирать "in ()" достаточно в датасете написать

SELECT TBase.Id, TBase.Name
FROM Table AS TBase WITH (NOLOCK)
WHERE TBase.Name in (@ParamVirma)

и к @ParamVirma привязать параметр отчета со поддержкой multiplevalues
Pvase
Дата: 24.04.2015 15:59:10
msLex
SSRS сам умеет собирать "in ()" достаточно в датасете написать

SELECT TBase.Id, TBase.Name
FROM Table AS TBase WITH (NOLOCK)
WHERE TBase.Name in (@ParamVirma)

и к @ParamVirma привязать параметр отчета со поддержкой multiplevalues

Так и делал. Параметр передавал как 'Name1','Name2' но в результате возвращался пустой результат.