sql >> Databasteknik >  >> RDS >> Sqlserver

Skickar flera värden för en SQL-parameter

Det finns några sätt att göra det. Du kan skicka in parametern som en XML-blobb som det här exemplet:

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 skicka in värdena som CSV och använd en delad funktion för att dela upp värdena i en tabellvariabel (det finns många delade funktioner där ute, snabb sökning kommer att skapa en).

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'

Om du använde SQL 2008 eller senare, kunde du ha använt Table Valued Parameters som låter dig skicka in en TABLE-variabel som en parameter. Jag bloggade om dessa 3 tillvägagångssätt för ett tag sedan, med en snabb prestandajämförelse.



  1. Lägg automatisk nyckelgenerering i viloläge med MySQL och Oracle

  2. Lokal rapport vs serverrapport i ASP .Net Rapportvisningskontroll

  3. Viloläge 'Invers' i mappningsfilen

  4. SQL Server Temp-tabell vs Tabellvariabel