Использовать, где в с Param - PullRequest
2 голосов
/ 04 декабря 2009

Как использовать параметр для нескольких значений в запросе "где в":

Select [..] where str in ('AB','BC')

Конечно, это не позволит использовать несколько значений:

Select [..] where str in (@param)

Ответы [ 3 ]

3 голосов
/ 04 декабря 2009

Альтернативой добавлению каждого значения в качестве отдельного параметра, если вы используете SQL Server 2008, является передача табличного параметра , который позволит вам сделать что-то вроде:

SELECT...
FROM YourTable t
    JOIN @TableParam p ON t.str = p.str

Если вы не используете SQL 2008 и действительно хотите передать все значения в виде одной строки CSV, тогда другой распространенный подход заключается в том, чтобы иметь пользовательскую функцию, которая разбивает строку CSV и возвращает таблицу TABLE, которую вы может присоединиться, например,

SELECT ....
FROM YourTable t
    JOIN dbo.fnSplit(@param) s ON t.str = s.str
1 голос
/ 04 декабря 2009
1 голос
/ 04 декабря 2009

Вам необходимо добавить каждый параметр в качестве значения в предложении IN, например,

where str in (@param1, @param2, @param3)

Кроме того, вы можете создать запрос вручную и выполнить его EXEC (хотя это также чревато опасностями).

РЕДАКТИРОВАТЬ: Итак, просто для пояснения, поскольку вы получаете строку значений, разделенных запятыми, которые затем хотите использовать в предложении IN, вам нужно будет сделать то, что предложил astander, и разбить вашу строку на таблицу который вы могли бы затем использовать в предложении.

Используя одну из упомянутых ссылок , вы можете сделать следующее:

select [...]
where str in (select items from dbo.split(@ItemString))

(где значения, разделенные запятыми, находятся в @ItemString).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...