sql >> Database >  >> RDS >> Sqlserver

Meerdere waardeparameters in SSRS doorgeven aan opgeslagen procedure

Juist, ik moet je eerst wat achtergrondinformatie geven.

Wanneer u de SSRS-parameter toestaat om meerdere waarden te selecteren, creëert de selectie van meerdere waarden een door komma's gescheiden tekenreeks als één tekenreeks

  'value1,value2,value3'

Waarden in een tekenreeks controleren met IN operator we hebben strings nodig die aaneengeschakeld zijn met komma's, zoiets als dit ....

  'value1','value2','value3'

Uw Proc

Als je nu expliciet waarden invoegt in je proces, worden er meerdere waarden in je tabel ingevoegd.

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

en dit geeft je de verwachte resultaten terug, zoals wanneer je binnen je procedure een instructie uitvoert zoals

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

Aan de andere kant, wanneer u probeert in te voegen in een tabel met behulp van SSRS-rapportparameter, voegt uw tabel waarde in zoals

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

Oplossing

TVP maken in deze situatie helpt het niet echt, wat ik doe is gebruik maken van dbo.Split() functie binnen mijn procedure.

Je kunt veel definities voor split-functie online vinden, voor een paar coole, kijk hier Split Function equivalent in tsql?

Als u deze splitfunctie eenmaal hebt gemaakt, gebruikt u deze functie gewoon binnen uw proceduredefinitie, u hebt dan niet eens de tabelwaardeparameters nodig.

Zoiets...

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


  1. Sql - alternatief voor WITH ... AS

  2. JDBC fundamentele concepten, pooling en threading

  3. toegang tot mysql-gebruikersrijniveau

  4. Voeg gegevens in 3 tabellen tegelijk in met Postgres