Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कई परिणाम सेट के साथ निष्पादन के साथ INSERT INTO

इस समस्या का एक समाधान OUTPUT . का उपयोग करना है परिणामसेट के बजाय पैरामीटर (JSON/XML)।

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;

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;

और अंतिम कॉल:

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;

DBFiddle डेमो

संपादित करें:

दूसरा तरीका tSQLt.ResultSetFilter का उपयोग करना है CLR फ़ंक्शन (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. SQL सर्वर:कॉलम से पंक्तियों तक

  2. कन्वर्ट () SQL सर्वर में

  3. SQL सर्वर में वास्तविक एक-से-एक संबंध कैसे बनाएं

  4. डेटाटाइम को फ्लोट में कनवर्ट करते समय SQL का कन्वर्ट फ़ंक्शन कैसे काम करता है?

  5. कॉलम के रूप में दिनांक के साथ गतिशील रूप से कैसे पिवट करें?