sql >> Base de Datos >  >> RDS >> Sqlserver

Pasar múltiples valores para un parámetro SQL

Hay algunas formas de hacerlo. Puede pasar el parámetro como un blob XML como este ejemplo:

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

O pase los valores como CSV y use una función de división para dividir los valores en una variable de tabla (hay muchas funciones de división, la búsqueda rápida arrojará una).

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'

Si estaba usando SQL 2008 o posterior, podría haber usado Parámetros con valores de tabla que le permiten pasar una variable TABLE como parámetro. Yo blog sobre estos 3 enfoques hace un tiempo, con una comparación rápida de rendimiento.