Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Melewati beberapa nilai untuk satu parameter SQL

Ada beberapa cara untuk melakukannya. Anda dapat meneruskan parameter sebagai gumpalan XML seperti contoh ini:

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

Atau berikan nilai sebagai CSV dan gunakan fungsi split untuk membagi nilai menjadi variabel tabel (ada banyak fungsi split di luar sana, pencarian cepat akan memunculkannya).

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'

Jika Anda menggunakan SQL 2008 atau yang lebih baru, Anda bisa menggunakan Parameter Bernilai Tabel yang memungkinkan Anda memasukkan variabel TABLE sebagai parameter. Saya membuat blog tentang 3 pendekatan ini beberapa waktu lalu, dengan perbandingan kinerja yang cepat.



  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 UNION UNTUK kolom keluaran nama XML

  2. Pemrosesan dimensi SSAS membuat ukuran dasar tidak diproses

  3. SQL mendapatkan nilai tertinggi dan menggabungkan

  4. Permintaan untuk menggabungkan beberapa baris menjadi baris yang berbeda dengan beberapa kolom

  5. Mengompresi bidang teks di Sql Server 2k8 R2