Значение MULIT и хранимые процедуры - PullRequest
1 голос
/ 29 июня 2009

Я рассмотрел другие вопросы, касающиеся выбора нескольких значений в службах отчетов, и ни один из них не помог мне решить проблему. Моя проблема заключается в следующем. У меня есть отчет с запросом по параметру - @ Type.
Выберите отдельный (тип) из TypeTable заказ по типу

Параметр отчета настроен, и отчет отображает все возвращенные результаты (в настоящее время 3) в поле выбора.

Моя хранимая процедура имеет следующее предложение: where Type in (@Type). Отчет возвращает только первый элемент в поле выбора вместо всех трех.

Пожалуйста, помогите.

спасибо !!!

Ответы [ 3 ]

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

Я не уверен в формате или типе данных, возвращаемых списком с множественным выбором, но если это что-то вроде:

X,Y,Z

у вас есть два варианта (я предпочитаю вариант 1):

вариант 1
Вы можете разделить его на части, используя Массивы и списки в SQL Server 2005 - используя таблицу чисел . Используя этот код, вы можете разбить строку на таблицу с каждым значением в отдельной строке. Затем вы можете присоединить эту таблицу к вашему запросу и выполнить фильтрацию на основе нескольких значений @Type.

вариант 2
В вашей хранимой процедуре вы можете динамически встроить ваш запрос в строку. Затем вы можете выполнить EXECUTE (@YourString) и выполнить этот запрос. Ваша строка будет выглядеть примерно так:

SET @ QUERY = 'SELECT ... FROM ... WHERE ... IN (' + ISNULL (@Type, '') + ')'

Посмотрите на эту ссылку Проклятие и благословения динамического SQL

0 голосов
/ 10 июля 2009

Я использовал следующую функцию табличной переменной, чтобы разбить список на таблицу, которая может быть JOIN'd в IN'd.

ALTER FUNCTION [dbo].[Split] ( @List nvarchar(4000), @SplitOn nvarchar(5) ) RETURNS @RtnValue table (
            Id int identity(1,1),   Value nvarchar(100) ) AS BEGIN  WHILE (Charindex(@SplitOn,@List)>0)         BEGIN           Insert Into @RtnValue (value)           Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))             Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))         END     Insert Into @RtnValue (Value)   Select Value = ltrim(rtrim(@List))

    Return END
0 голосов
/ 29 июня 2009

Я не верю, что можно сделать оператор IN (@type).

IN должен быть разделен запятой, и я не думаю, что вы можете передать @Type как "1,2,3" и заставить его работать.

Возможно, вы могли бы проанализировать переменную @Type во временной таблице, а затем выполнить JOIN для временной таблицы. Это может быть немного медленно, хотя.

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