Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Предаване на множество стойности за един SQL параметър

Има няколко начина да го направите. Можете да подадете параметъра като XML петно ​​като този пример:

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

Или предайте стойностите като CSV и използвайте функция за разделяне, за да разделите стойностите в променлива на таблица (има много функции за разделяне, бързото търсене ще изведе една).

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'

Ако сте използвали SQL 2008 или по-нова версия, може да сте използвали параметри със стойност на таблица, които ви позволяват да подадете променлива TABLE като параметър. Аз блог за тези 3 подхода преди време, с бързо сравнение на ефективността.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008:Подреждането по дата и час е твърде бавно

  2. SQL Server heap v.s. клъстерен индекс

  3. Как да върна две колони от първата таблица, ако само една колона частично съвпада с втората?

  4. Как да конвертирате база данни на Visual Foxpro в база данни на SQL Server

  5. TSQL-2008 SUM(X) НАД (ДЯЛ ... ПОРЪЧКА ПО КЛАУЗА)