Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server (2008) Chuyển ArrayList hoặc String tới SP cho IN ()

Bạn có thể sử dụng một chức năng do người dùng xác định, chẳng hạn như

CREATE function [dbo].[csl_to_table] ( @list nvarchar(MAX) )
RETURNS @list_table TABLE ([id] INT)
AS
BEGIN
    DECLARE     @index INT,
            @start_index INT,
            @id INT

    SELECT @index = 1 
    SELECT @start_index = 1
    WHILE @index <= DATALENGTH(@list)
    BEGIN

        IF SUBSTRING(@list,@index,1) = ','
        BEGIN

            SELECT @id = CAST(SUBSTRING(@list, @start_index, @index - @start_index ) AS INT)
            INSERT @list_table ([id]) VALUES (@id)
            SELECT @start_index = @index + 1
        END
        SELECT @index  = @index + 1
    END
    SELECT @id = CAST(SUBSTRING(@list, @start_index, @index - @start_index ) AS INT)
    INSERT @list_table ([id]) VALUES (@id)
    RETURN
END

Nó chấp nhận một danh sách id được phân tách bằng dấu phẩy nvarchar và trả về một bảng các id đó dưới dạng int. Sau đó, bạn có thể tham gia vào bảng được trả về trong quy trình được lưu trữ của bạn như vậy -

DECLARE @passed_in_ids TABLE (id INT)

INSERT INTO @passed_in_ids (id)
  SELECT 
    id 
  FROM
    [dbo].[csl_to_table] (@your_passed_in_csl)

SELECT *
FROM 
myTable
INNER JOIN
@passed_in_ids ids
ON
myTable.id = ids.id


  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 lưu trữ thủ tục trả về mã kỳ quặc

  2. 5 công cụ tạo mô hình dữ liệu hàng đầu cho SQL Server

  3. Hợp nhất nhiều cột trong một, duy trì sự giống nhau và thay thế sự khác biệt

  4. Làm cách nào để điền vào một cột với các số ngẫu nhiên trong SQL? Tôi nhận được cùng một giá trị trong mọi hàng

  5. Triển khai chức năng phân trang (bỏ qua / lấy) với truy vấn này