sql >> Database teknologi >  >> RDS >> Sqlserver

Videregivelse af flere værdier for én SQL-parameter

Der er et par måder at gøre det på. Du kan indsætte parameteren som en XML-blob som dette eksempel:

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

Eller indsend værdierne som CSV og brug en split-funktion til at opdele værdierne i en tabelvariabel (der er en masse split-funktioner derude, hurtig søgning vil kaste en 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'

Hvis du brugte SQL 2008 eller nyere, kunne du have brugt Table Valued Parameters, som giver dig mulighed for at sende en TABLE-variabel ind som en parameter. Jeg bloggede om disse 3 tilgange for et stykke tid tilbage, med en hurtig præstationssammenligning.



  1. Hvordan kontrollerer jeg, om værdien allerede findes i tabellen?

  2. mysql kopiere kolonnedatatypen til en anden tabel

  3. Hvad er nyt i Access 2016? Er det værd at opgradere?

  4. Postgresql-opdatering med join