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

CHÈN VÀO với tệp thực thi với nhiều bộ kết quả

Một giải pháp cho vấn đề này là sử dụng OUTPUT tham số (JSON / XML) thay vì tập kết quả.

CREATE TABLE tab1(ID INT, Name NVARCHAR(10), Amount MONEY);
INSERT INTO tab1(ID, Name, Amount)
VALUES (1, 'Alexander', 10),(2, 'Jimmy', 100), (6, 'Billy', 20);

CREATE PROCEDURE dbo.pVendorBalance 
AS
BEGIN
   -- first resultset
   SELECT * FROM tab1 WHERE ID <=2;

   -- second resultset
   SELECT * FROM tab1 WHERE ID > 5;
END;

Phiên bản có thông số OUT:

CREATE PROCEDURE dbo.pVendorBalance2 
         @resultSet1 NVARCHAR(MAX) OUT,
         @resultSet2 NVARCHAR(MAX) OUT
AS
BEGIN
    SELECT @resultSet1 = (SELECT * FROM tab1 WHERE ID <=2 FOR JSON AUTO),
           @resultSet2 = (SELECT * FROM tab1 WHERE ID > 5 FOR JSON AUTO);
END;

Và cuộc gọi cuối cùng:

DECLARE @r1 NVARCHAR(MAX), @r2 NVARCHAR(MAX);
EXEC dbo.pVendorBalance2 @r1 OUT, @r2 OUT;


-- first resultset as table
SELECT * 
INTO #t1
FROM OpenJson(@r1)
WITH (ID int '$.ID', [Name] NVARCHAR(50) '$.Name',Amount money '$.Amount');

-- second resultset as table
SELECT *  
INTO #t2
FROM OpenJson(@r2)
WITH (ID int '$.ID', [Name] NVARCHAR(50) '$.Name',Amount money '$.Amount');

SELECT * FROM #t1;
SELECT * FROM #t2;

Bản trình diễn DBFiddle

CHỈNH SỬA:

Cách tiếp cận thứ hai là sử dụng tSQLt.ResultSetFilter Hàm CLR (một phần của khung thử nghiệm tSQLt):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo nhanh để sửa chữa và khôi phục cơ sở dữ liệu SQL mà không cần sao lưu

  2. Thêm tài khoản thư cơ sở dữ liệu vào hồ sơ (SSMS)

  3. Sự khác biệt giữa Người dùng và Đăng nhập trong SQL Server

  4. Các ký tự thoát khỏi tìm kiếm toàn văn bản trong SQL Server?

  5. SQL Server tương đương với kiểu dữ liệu MySQL enum?