Передача нескольких значений параметров в SSRS для хранимой процедуры

Я пытаюсь передать параметр строки с несколькими значениями в параметр типа таблицы в хранимой процедуре SQL Server 2012. Я вставляю этот код в набор данных SSRS:

DECLARE @mylist clinic_list_tbltype
INSERT @mylist(n) VALUES (@pm_ChooseClinics)
EXEC sp_Skillset_Summary_With_Callbacks_Report @mylist, @pm_ChooseInterval, @pm_StartDateTime, @pm_EndDateTime

clinic_list_tbltype - это тип таблицы, который я создал с одним полем varchar (50) с именем "n". Я могу вызвать эту хранимую процедуру из SSMS o.k. (и он возвращается очень быстро):

DECLARE @mylist clinic_list_tbltype
INSERT @mylist(n) VALUES ('clinicA'), ('clinicB')
EXEC sp_Skillset_Summary_With_Callbacks_Report  @mylist, 'Daily', '6/3/2014', '6/9/2014'

Я могу работать в SSRS только для одной клиники (но очень медленной), но если я попробую более одного, это даст ошибку, говоря, что

в инструкции INSERT меньше столбцов, чем указано в предложении Values ​​

. Даже работает для одного clnic, он работает, но для выполнения запроса в SSMS требуется очень много времени. Как 2 минуты против 1 секунды. Должно быть, потому что я прохожу ( "clinicA", "clinicB" ) вместо ( "clinicA" ) ( "clinicB" ).

Как сделать?

Ответ 1

Правильно, мне нужно дать вам немного земли 1-го.

Если вы разрешаете параметру SSRS выбирать несколько значений, выбор нескольких значений создает строку с разделителями с запятой в виде одной строки

  'value1,value2,value3'

Чтобы проверить значения в строке с помощью оператора IN, нам нужны строки, конкатенированные запятыми, что-то вроде этого....

  'value1','value2','value3'

Ваш Proc

Теперь в вашем proc, когда вы вставляете значения явно, он вставляет в таблицу несколько значений.

  INSERT INTO Table_Value_Param
  VALUES ('value1'),       --<-- 1st value/Row
         ('value2'),       --<-- 2nd Value/Row
         ('value3')        --<-- 3rd Value/Row

и это возвращает ожидаемые результаты, так как внутри вашей процедуры вы выполняете инструкцию типа

SELECT * 
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName 
                     FROM Table_Value_Param)

С другой стороны, когда вы пытаетесь вставить в таблицу с помощью отчета SSRS Параметр, вы вставляете таблицу как

  INSERT INTO Table_Value_Param
  VALUES ('value1,value2,value3')   --<-- One Row/Value containing all the values comma separated

Решение

Создание TVP в этой ситуации действительно не помогает, то, что я делаю, использует функцию dbo.Split() внутри моей процедуры.

Вы можете найти множество определений для функции split в Интернете, для некоторых классных смотрите здесь Split Function equivalent in tsql?

Как только вы создали эту функцию split, просто используйте эту функцию внутри вашего определения процедуры, тогда вам даже не нужны параметры, соответствующие таблице.

Что-то вроде этого...

  SELECT * 
  FROM Table_Name 
  WHERE ColumnName IN ( 
                       SELECT Value
                       FROM dbo.Split(@Report_Param, ',')
                       ) 

Ответ 2

declare @Vendors_Filter nvarchar(max) = 'a,b,c'
declare @Vendors nvarchar(max) 
set @Vendors =''''+replace(@Vendors_Filter,',',''',''')+'''' 
select @Vendors