Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Възможно ли е клаузата за изход на SQL да върне колона, която не е вмъкната?

Можете да направите това, като използвате 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. Как да получа идентификатор за вмъкване в MSSQL в PHP?

  2. Екраниране на единични кавички в SQL Server

  3. 4 начина да получите списък с графици в SQL Server Agent (T-SQL)

  4. Използвайте SET TEXTSIZE, за да ограничите връщаните данни за всеки ред в SQL Server

  5. Скаларно вграждане на UDF в SQL Server 2019