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

एसक्यूएल आउटपुट क्लॉज के लिए कॉलम को सम्मिलित नहीं करने के लिए यह संभव है?

आप MERGE . का उपयोग करके ऐसा कर सकते हैं डालने के बजाय:

इसलिए इसे बदलें

INSERT INTO ReportOption (field1, field2...)
OUTPUT @ReportOption.PracticeId, --> this is the field I don't know how to get
       inserted.ReportOptionId
  INTO @PracticeReportOption (PracticeId, ReportOptionId)
SELECT field1, field2
  FROM @ReportOption

. के साथ
MERGE INTO ReportOption USING @ReportOption AS temp ON 1 = 0
WHEN NOT MATCHED THEN
    INSERT (field1, field2)
    VALUES (temp.Field1, temp.Field2)
    OUTPUT temp.PracticeId, inserted.ReportOptionId, inserted.Field1, inserted.Field2
    INTO @PracticeReportOption (PracticeId, ReportOptionId, Field1, Field2);

कुंजी एक विधेय का उपयोग करना है जो मर्ज खोज स्थिति में कभी भी सत्य (1 =0) नहीं होगा, इसलिए आप हमेशा सम्मिलित करेंगे, लेकिन स्रोत और गंतव्य तालिका दोनों में फ़ील्ड तक पहुंच प्राप्त करेंगे।

यहां वह संपूर्ण कोड है जिसका मैंने परीक्षण करने के लिए उपयोग किया था:

CREATE TABLE ReportOption (ReportOptionID INT IDENTITY(1, 1), Field1 INT, Field2 INT)
CREATE TABLE Practice (PracticeID INT IDENTITY(1, 1), Field1 INT, Field2 INT)
CREATE TABLE PracticeReportOption (PracticeReportOptionID INT IDENTITY(1, 1), PracticeID INT, ReportOptionID INT, Field1 INT, Field2 INT)

INSERT INTO Practice VALUES (1, 1), (2, 2), (3, 3), (4, 4)


MERGE INTO ReportOption r USING Practice p ON 1 = 0
WHEN NOT MATCHED THEN
    INSERT (field1, field2)
    VALUES (p.Field1, p.Field2)
    OUTPUT p.PracticeId, inserted.ReportOptionId, inserted.Field1, inserted.Field2
    INTO PracticeReportOption (PracticeId, ReportOptionId, Field1, Field2);

SELECT  *
FROM    PracticeReportOption

DROP TABLE ReportOption
DROP TABLE Practice
DROP TABLE PracticeReportOption 

अधिक पढ़ने, और इस विषय पर मुझे जो कुछ भी पता है उसका स्रोत यहां है



  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. एंटिटी फ्रेमवर्क कोड-फर्स्ट इनिशियलाइज़र में डेटाबेस संयोजन सेट करें

  3. SQL सर्वर में संदर्भित निकाय खोजें:sys.dm_sql_referenced_entities

  4. पता लगाएँ कि कौन सा ऑपरेटिंग सिस्टम SQL सर्वर चल रहा है (T-SQL उदाहरण)

  5. यहां तीन कारण बताए गए हैं कि आप अपने SQL इंस्टेंस में चरम गतिविधि क्यों देख सकते हैं