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

Przekazywanie wielu wartości dla jednego parametru SQL

Można to zrobić na kilka sposobów. Możesz przekazać parametr jako obiekt blob XML, tak jak w tym przykładzie:

CREATE PROCEDURE [dbo].[uspGetCustomersXML]
    @CustomerIDs XML
AS
BEGIN
SELECT c.ID, c.Name
FROM [dbo].[Customer] c
JOIN @CustomerIDs.nodes('IDList/ID') AS x(Item) ON c.ID = Item.value('.', 'int' )
END
GO

--Example Use:
EXECUTE [dbo].[uspGetCustomersXML] '<IDList><ID>1</ID><ID>10</ID><ID>100</ID></IDList>'

Lub przekaż wartości jako CSV i użyj funkcji podziału, aby podzielić wartości na zmienną tabeli (jest wiele funkcji podziału, szybkie wyszukiwanie wyrzuci jedną).

CREATE PROCEDURE [dbo].[uspGetCustomersCSV]
    @CustomerIDs VARCHAR(8000)
AS
BEGIN
SELECT c.Id, c.Name
FROM [dbo].[Customer] c
JOIN dbo.fnSplit(@CustomerIDs, ',') t ON c.Id = t.item
END
GO

--Example Use:
EXECUTE [dbo].[uspGetCustomersCSV] '1,10,100'

Jeśli korzystasz z SQL 2008 lub nowszego, możesz użyć parametrów o wartościach tabeli, które umożliwiają przekazanie zmiennej TABLE jako parametru. blogowałem o tych 3 podejściach jakiś czas temu, z szybkim porównaniem wydajności.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:Umieść zestaw wyników procedury składowanej w zmiennej tabeli bez określania jej schematu

  2. Czy możesz utworzyć CLR UDT, aby zezwolić na wspólny typ tabeli w bazach danych?

  3. Jak wybrać nazwy kolumn z wielu tabel w SQL Server 2000-2008, które znajdują się w zestawie nazw?

  4. SSRS Filtr parametrów wielu wartości oparty na zbiorze danych

  5. Tworzenie gniazda wewnątrz wyzwalacza SQL-CLR lub procedury składowanej