首页 > 解决方案 > 如何使用输出子句从连接表中捕获列?

问题描述

我正在通过加入 tableB 和 tableC 来更新一个名为 tableA 的表,同时我正在使用 tableA 的输出子句将更新的记录捕获到临时表中。现在我想从表 B 中捕获更新数据的列,但输出子句不允许相同。

例如:

Update SLC Set SLC.Datascrublevel =  C.Datascrublevel
        OUTPUT [Deleted].Systemcode,                
       [Deleted].Systemkey,
       [Deleted].datascrublevel,
        [Inserted].datascrublevel 
       INTO #TEMP1                      
       FROM TABLEA SLC with(nolock)                
    INNER JOIN TABLEB SC ON SC.SystemCode = SLC.SystemCode  
    INNER JOIN TABLEC SL ON SL.SystemCode = SLC.SystemCode and SLC.SystemKey = SL.Systemkey                 
    INNER JOIN #TEMP C ON                   SLC.Datascrublevel <> C.DataScrubLevel AND C.Systemcode = SLC.SystemCode and C.Systemkey = SLC.SystemKey

现在我希望 tableB 中的列使用输出子句捕获到临时表中。如果有任何替代方法,请提供您的建议。

标签: sqlsql-server

解决方案


就像你给它一样[deleted].[Column Name][Inserted].[Column Name]添加一列作为[SC].[Column Name]

例子 :

IF OBJECT_ID('TempDb..#TABLEA') IS NOT NULL
    DROP TABLE #TABLEA

IF OBJECT_ID('TempDb..#TABLEB') IS NOT NULL
    DROP TABLE #TABLEB

IF OBJECT_ID('TempDb..#TABLEC') IS NOT NULL
    DROP TABLE #TABLEC

IF OBJECT_ID('TempDb..#TABLED') IS NOT NULL
    DROP TABLE #TABLED


CREATE TABLE #TABLEA
(
    SeqNo INT IDENTITY(1,1),
    MyDate DATE
)

CREATE TABLE #TABLEB
(
    SeqNo INT IDENTITY(1,1),
    FullName VARCHAR(20)
)

CREATE TABLE #TABLEC
(
    SeqNo INT IDENTITY(1,1),
    FullName VARCHAR(20),
    MyDate DATE
)

CREATE TABLE #TABLED
(
    SeqNo INT,
    MyDate DATE,
    FullName VARCHAR(20)    
)

INSERT INTO #TABLEA
(
    MyDate
)
SELECT GETDATE()
UNION
SELECT GETDATE()+1
UNION
SELECT GETDATE()-1

INSERT INTO #TABLEB
(
    FullName
)
VALUES('A'),('B'),('C')

INSERT INTO #TABLEC
(
    FullName
)
VALUES('A'),('B'),('C')

UPDATE C
    SET MyDate = A.MyDate
    OUTPUT
    deleted.SeqNo,
    deleted.MyDate,
    B.FullName
    INTO #TABLED
    FROM #TABLEC C
        INNER JOIN #TABLEB B
            ON C.FullName = B.FullName
        INNER JOIN #TABLEA A
            ON A.SeqNo = B.SeqNo

SELECT * FROM #TABLED

推荐阅读