Как отправить многозначный параметр служб Reporting Services в функцию SQL Server? - PullRequest
3 голосов
/ 05 июня 2009

У меня есть отчет, в котором многозначный параметр используется в операторе «in» в запросе. Например (с @areas в качестве параметра с несколькими значениями):

select * from regions where areas in (@areas)

Это работает отлично, но теперь мне нужно отправить тот же параметр функции в базе данных SQL Server 2005:

select name, myFunction(@areas) from regions where areas in (@areas)

Параметр @areas в функции также будет использоваться в операторе "in". Я пытался получить его с параметром varchar, но это вызывает ошибку. Когда я использую SQL Profiler, я вижу, что параметр передается в следующем формате:

N''1'',N''2'',N''3''

Здесь возникают конкретные вопросы: каким типом данных должен быть параметр функции @areas? И как я могу использовать этот параметр в выражении "in" в функции?

Спасибо

Ответы [ 3 ]

2 голосов
/ 05 июня 2009

Как правило, если вы собираетесь передавать список какого-то типа в качестве параметра, вы захотите передать его как varchar достаточно большой длины, чтобы обработать его полностью. Вы также можете передать его в качестве параметра XML, но я всегда предпочитал использовать маршрут varchar и анализировать его таким образом.

1 голос
/ 05 июня 2009

Для sql 2008 существуют перечисленные в таблице параметры. В противном случае ваши единственные варианты - передать его в виде упакованного значения (либо с разделением запятыми в varchar или xml), либо заполнить временную таблицу и получить функцию, считываемую из временной таблицы. Если вы вызываете несколько функций с одним и тем же большим вводом, временная таблица, вероятно, является наилучшим маршрутом, поэтому вам не нужно продолжать ее разбор. Если исходным вводом является xml (то есть, у вас есть какой-то вклад от внешнего партнера, такого как facebook), то обычно лучше сохранять его как xml. Если это просто скромный список значений, то список значений, разделенных запятыми, неплох.

0 голосов
/ 05 июня 2009

Табличные параметры поддерживаются в SQL Server начиная с версии 2008: http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

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