Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Pvase
Member

Откуда:
Сообщений: 990
Подскажите пожалуйста, как сделать чтобы вот такой запрос:
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'))


Спасибо.
24 апр 15, 14:56    [17559487]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
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".
24 апр 15, 14:58    [17559523]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pvase
возвращал результаты как вот такой без параметра:

Надо эти значения передавать как таблицу, а не как строку
24 апр 15, 14:59    [17559529]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Pvase
Member

Откуда:
Сообщений: 990
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))

Но вопрос пока не решен.
24 апр 15, 15:01    [17559545]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Pvase
правильный первый запрос такой
правильный, да?
24 апр 15, 15:02    [17559553]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Pvase
Member

Откуда:
Сообщений: 990
Glory,

Как таблицу нельзя, параметр передается из внешней программы "Построителя отчетов" (Reporting Servers), в нем не нашел параметра с типом таблица.
24 апр 15, 15:02    [17559557]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Pvase
Но вопрос пока не решен
Парсить @Param по разделителю,
собирать результат в таблицу (необязательно постоянную, можно функцию тут, на форуме, найти)
и подставлять в IN() подзапрос из этой таблицы, а не скалярную переменную.
24 апр 15, 15:05    [17559580]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Pvase
Member

Откуда:
Сообщений: 990
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.
24 апр 15, 15:13    [17559659]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
msLex
Member

Откуда:
Сообщений: 8246
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
24 апр 15, 15:33    [17559805]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Pvase
Member

Откуда:
Сообщений: 990
msLex
SSRS сам умеет собирать "in ()" достаточно в датасете написать

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

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

Так и делал. Параметр передавал как 'Name1','Name2' но в результате возвращался пустой результат.
24 апр 15, 15:59    [17559949]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
msLex
Member

Откуда:
Сообщений: 8246
Pvase
msLex
SSRS сам умеет собирать "in ()" достаточно в датасете написать

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

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

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

Как передавали?

Еще раз, нужно привязать параметр отчета со поддержкой multiplevalues
24 апр 15, 16:37    [17560129]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
msLex, и вы уверены, что "WITH (NOLOCK) " действительно нужен?
26 апр 15, 14:59    [17565443]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pvase
Спасибо, в SSMS работает, а вот из конструктора в SSRS (Reporting Services) выдает ошибку "Необходимо объявить скалярную переменную @ParamVirma".

В SSRS есть свой способ передачи мульти-значений в запрос. Зачем вы пытаетесь придумать что-то свое ?
26 апр 15, 15:02    [17565448]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на вхождение по парамтеру (IN @Parametr)?  [new]
msLex
Member

Откуда:
Сообщений: 8246
Mike_za
msLex, и вы уверены, что "WITH (NOLOCK) " действительно нужен?

понятие не имею, это запрос автора.
на передачу multiplevalue параметров в SSRS это никак не влияет.
27 апр 15, 12:59    [17568765]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить