sql >> Database >  >> RDS >> Sqlserver

Meerdere waarden doorgeven voor één SQL-parameter

Er zijn een paar manieren om dit te doen. U kunt de parameter doorgeven als een XML-blob zoals in dit voorbeeld:

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>'

Of geef de waarden door als CSV en gebruik een splitfunctie om de waarden op te splitsen in een tabelvariabele (er zijn veel splitfuncties beschikbaar, snel zoeken levert er een op).

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'

Als u SQL 2008 of later gebruikte, had u Table Valued Parameters kunnen gebruiken waarmee u een TABLE-variabele als parameter kunt doorgeven. Ik heb geblogd over deze 3 benaderingen een tijdje terug, met een snelle prestatievergelijking.



  1. Codeigniter:verbinding met een SQL-server instellen (2008)

  2. Hoe kan ik het standaard back-uppad voor SQL Server 2008 Express R2 programmatisch verkrijgen met C#?

  3. Tabel- en indexopslaggrootte ophalen in sql-server

  4. Hoe verander je een datatype CLOB NAAR VARCHAR2(sql)