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

Apakah mungkin untuk klausa Output SQL untuk mengembalikan kolom yang tidak dimasukkan?

Anda dapat melakukannya dengan menggunakan MERGE alih-alih menyisipkan:

jadi ganti ini

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

dengan

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);

Kuncinya adalah menggunakan predikat yang tidak akan pernah benar (1 =0) dalam kondisi pencarian gabungan, sehingga Anda akan selalu melakukan penyisipan, tetapi memiliki akses ke bidang di tabel sumber dan tujuan.

Berikut adalah seluruh kode yang saya gunakan untuk mengujinya:

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 

Lebih banyak bacaan, dan sumber dari semua yang saya tahu tentang masalah ini ada di Sini



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Forum Kinerja SQL Server Terbaik untuk Bantuan pada Pertanyaan Terberat

  2. Tambahkan hubungan Kunci Asing antara dua Basis Data

  3. Bagaimana saya bisa menemukan karakter Unicode/non-ASCII di bidang NTEXT di tabel SQL Server 2005?

  4. 4 Fungsi untuk Memformat Angka menjadi 2 Tempat Desimal di SQL Server

  5. Saya telah memutakhirkan Driver SQL Server ODBC dan kinerja telah terpengaruh secara negatif. Apa yang dapat saya?