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

Prosedur tersimpan dengan jumlah variabel parameter

Anda dapat meneruskannya sebagai daftar yang dipisahkan koma, lalu menggunakan fungsi split, dan menggabungkan hasilnya.

CREATE FUNCTION dbo.SplitInts
(
   @List       VARCHAR(MAX),
   @Delimiter  CHAR(1)
)
RETURNS TABLE
AS
   RETURN 
   (
       SELECT Item = CONVERT(INT, Item)
       FROM
       (
           SELECT Item = x.i.value('(./text())[1]', 'INT')
           FROM
           (
               SELECT [XML] = CONVERT(XML, '<i>' 
                    + REPLACE(@List, @Delimiter, '</i><i>') 
                    + '</i>').query('.')
           ) AS a
           CROSS APPLY
           [XML].nodes('i') AS x(i)
       ) AS y
       WHERE Item IS NOT NULL
   );

Sekarang prosedur tersimpan Anda:

CREATE PROCEDURE dbo.doStuff
    @List VARCHAR(MAX)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT cols FROM dbo.table AS t
        INNER JOIN dbo.SplitInts(@List, ',') AS list
        ON t.ID = list.Item;
END
GO

Kemudian untuk menyebutnya:

EXEC dbo.doStuff @List = '1, 2, 3, ...';

Anda dapat melihat beberapa latar belakang, opsi lain, dan perbandingan kinerja di sini:

Namun, pada SQL Server 2016 atau lebih tinggi, Anda harus melihat STRING_SPLIT() dan STRING_AGG() :



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GRANT EXECUTE ke semua prosedur tersimpan

  2. Cara memanggil layanan web dari prosedur tersimpan SQL Server

  3. Validasi email di sql server 2008?

  4. Mempercepat pembaruan 185k baris di SQL Server 2008?

  5. Hirarki Teknologi Memori/Penyimpanan dan SQL Server