Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przekazywanie wielu parametrów wartości w SSRS do procedury składowanej

Racja, muszę dać ci pierwszeństwo.

Po zezwoleniu parametrowi SSRS na wybór wielu wartości, wybór wielu wartości tworzy ciąg wartości oddzielony przecinkami jako jeden ciąg

  'value1,value2,value3'

Aby sprawdzić wartości w ciągu znaków za pomocą IN operator potrzebujemy ciągów połączonych przecinkami, coś takiego ....

  'value1','value2','value3'

Twój proces

Teraz w twoim proc, kiedy wstawiasz wartości jawnie, wstawia wiele wartości do twojej tabeli.

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

a to daje oczekiwane wyniki, tak jak podczas wykonywania w procedurze instrukcji, takiej jak

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

Z drugiej strony, gdy próbujesz wstawić do tabeli za pomocą raportu SSRS, Parametr, który wstawiasz do tabeli, wstawia wartość taką jak

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

Rozwiązanie

Tworzenie TVP w tej sytuacji naprawdę nie pomaga, to, co robię, to korzystanie z dbo.Split() funkcjonować w mojej procedurze.

Możesz znaleźć wiele definicji funkcji split online, dla kilku fajnych spójrz tutaj Split Function equivalent in tsql?

Po utworzeniu tej funkcji podziału po prostu użyj tej funkcji w definicji procedury, wtedy nie potrzebujesz nawet parametrów o wartościach w tabeli.

Coś takiego...

  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. Przykład żądania SQL Server 2008 dotyczący tworzenia kursora w pętli do rekordów

  2. Jak włączyć uprawnienia w udziale folderu FileTable programu SQL Server 2012?

  3. Sposób wstawienia tekstu zawierającego ' (apostrof) do tabeli SQL

  4. Jak usunąć z wielu tabel za pomocą INNER JOIN na serwerze SQL?

  5. Dowiedz się, jak przeprowadzać analizę produktów za pomocą wyszukiwania pełnotekstowego programu SQL Server. Część 2