Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Предаване на множество параметри на стойност в SSRS към съхранена процедура

Добре, първо трябва да ви дам малко информация.

Когато позволите на параметъра SSRS да избира множество стойности, изборът на множество стойности създава разделен със запетая низ от стойност като един низ

  'value1,value2,value3'

За да проверите стойности в низ с помощта на IN оператор имаме нужда от низове, свързани със запетаи, нещо подобно ....

  'value1','value2','value3'

Вашата процедура

Сега във вашата процедура, когато изрично вмъквате стойности, тя вмъква множество стойности във вашата таблица.

  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 Function equivalent in tsql?

След като създадете тази функция за разделяне, просто използвайте тази функция във вашата дефиниция на процедура, тогава дори нямате нужда от параметри с стойности на таблица.

Нещо подобно...

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Помощ за рекурсивно свързване на CTE заявка към втора таблица

  2. Бавно променящо се измерение - какво е чисто изпълнение тип 6

  3. Как да внедря LIMIT със SQL Server?

  4. DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) Може ли някой да ми обясни това

  5. Създайте T-SQL функция с параметър на таблицата