如何使用输出子句从联接表中捕获列?

时间:2018-09-20 09:43:01

标签: sql sql-server

我正在通过连接tableB和tableC来更新名为tableA的表,同时使用tableA的输出子句将更新的记录捕获到temp表中。现在,我希望从表B捕获列以获取更新的数据,但是output子句不允许这样做。

例如:

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中的列捕获到临时表中。如果还有其他方法,请提供您的建议。

1 个答案:

答案 0 :(得分:0)

就像您将其指定为[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