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

INSERT INTO dengan exec dengan beberapa set hasil

Salah satu solusi untuk masalah ini adalah menggunakan OUTPUT parameter (JSON/XML) alih-alih kumpulan hasil.

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;

Versi dengan parameter 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;

Dan panggilan terakhir:

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;

Demo DBFiddle

EDIT:

Pendekatan kedua adalah dengan menggunakan tSQLt.ResultSetFilter Fungsi CLR (bagian dari kerangka pengujian 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. Cara Memigrasi Pekerjaan SQL Server Dari Satu Instance SQL Server Ke Yang Lain

  2. Analisis MS SQL Server untuk Mereka yang Melihatnya untuk Pertama Kali

  3. SQL Server Sisipan file CSV secara massal dengan tanda kutip yang tidak konsisten

  4. Kueri server SQL untuk mendapatkan daftar kolom dalam tabel bersama dengan tipe Data, NOT NULL, dan batasan PRIMARY KEY

  5. hash baris SQL?