sql >> Database teknologi >  >> RDS >> Sqlserver

Er det muligt for SQL Output-sætning at returnere en kolonne, der ikke er indsat?

Du kan gøre dette ved at bruge MERGE i stedet for at indsætte:

så udskift dette

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

med

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

Nøglen er at bruge et prædikat, der aldrig vil være sandt (1 =0) i flettesøgningstilstanden, så du vil altid udføre indsættelsen, men har adgang til felter i både kilde- og destinationstabellerne.

Her er hele koden, jeg brugte til at teste den:

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 

Mere læsning, og kilden til alt, hvad jeg ved om emnet, er her



  1. Hvor er mit ugyldige tegn (ORA-00911)

  2. Sådan installeres MySQL på Windows

  3. Hvordan spooler jeg til en CSV-formateret fil ved hjælp af SQLPLUS?

  4. Revisionslogning for PostgreSQL