sql >> Databáze >  >> RDS >> Sqlserver

Předávání více hodnotových parametrů v SSRS do uložené procedury

Správně, musím vám dát trochu pozadí.

Když parametru SSRS povolíte výběr více hodnot, výběr více hodnot vytvoří řetězec hodnot oddělený čárkou jako jeden řetězec

  'value1,value2,value3'

Chcete-li zkontrolovat hodnoty v řetězci pomocí IN operátor potřebujeme řetězce zřetězené čárkami něco takového ....

  'value1','value2','value3'

Váš postup

Nyní ve vašem procesu, když explicitně vložíte hodnoty, vloží do vaší tabulky více hodnot.

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

a to vám vrátí očekávané výsledky, jako když uvnitř procedury provedete příkaz jako

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

Na druhou stranu, když se pokusíte vložit do tabulky pomocí parametru sestavy SSRS, tabulka vloží hodnotu jako

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

Řešení

Vytváření TVP v této situaci opravdu nepomáhá, co dělám, je použití dbo.Split() funkce uvnitř mého postupu.

Mnoho definic pro funkci rozdělení můžete najít online, na některé skvělé se podívejte zde Split Function equivalent in tsql?

Jakmile vytvoříte tuto funkci rozdělení, použijte tuto funkci v definici procedury, pak ani nepotřebujete parametry s hodnotou tabulky.

Něco takového...

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


  1. Automatické škálování s Amazon Aurora Serverless

  2. Jak připojit MySQL k programu Java

  3. Jak změnit časové pásmo serveru MySQL

  4. O kolik rychlejší je časové razítko než sloupec datetime v MySQL?