sql >> Databáze >  >> RDS >> Sqlserver

Předávání více hodnot pro jeden parametr SQL

Existuje několik způsobů, jak to udělat. Parametr můžete předat jako objekt blob XML, jako je tento příklad:

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

Nebo předejte hodnoty jako CSV a použijte funkci rozdělení k rozdělení hodnot do proměnné tabulky (existuje spousta rozdělených funkcí, rychlé vyhledávání jednu vyvolá).

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'

Pokud jste používali SQL 2008 nebo novější, mohli jste použít parametry tabulky hodnot, které vám umožňují předat proměnnou TABLE jako parametr. blogoval jsem o těchto 3 přístupech před chvílí, s rychlým srovnáním výkonu.



  1. 2 Funkce, které získají den, měsíc a rok z data v Oracle

  2. Je lepší vytvořit index před naplněním tabulky daty, nebo poté, co jsou data na svém místě?

  3. Indexování MySQL a používání řazení souborů

  4. Nebyla vybrána žádná sada záloh k obnovení SQL Server 2012