2016-07-01 40 views
0

我正在使用SQL Server觸發器。而且我需要一個sql查詢來查找表中已經使用INSERTED和DELETED表更新值的列。如何從表中獲取更新的列?

任何人都可以幫我解決這個問題嗎?對於前 -

DECLARE @T1 TABLE (Name NVARCHAR(MAX), LName nvarchar(max), Address1 Nvarchar(max),id int) 

DECLARE @T2 TABLE (Name NVARCHAR(MAX), LName nvarchar(max), Address1 Nvarchar(max), id int) 


insert into @T1 values('Ricky','Broad','a b road',1) 

insert into @T1 values('Mike','Halls','m g road',2) 


insert into @T2 values('Ricky_Update','Broad','a b road',1) 

insert into @T2 values('Mike','Halls','m g road',2) 


;WITH ChangedData AS (
SELECT d.name , d.LName FROM @T1 d 
EXCEPT 
SELECT i.name , i.LName FROM @T2 i 
) 

我試圖找出「EXCEPT」,但它是返回整個更新的行。我只需要像上面示例中那樣更新的列,我只需要 -

id = 1的名稱列,因爲它已更新。

+0

你可以發表一些你曾經嘗試過的例子嗎? – Padhraic

+0

爲了什麼目的?您將在插入/刪除完成或INSTEAD後使用此表? – gofr1

回答

0

你必須做的除了個別列,然後做聯盟。

SELECT NAME 
FROM (
    SELECT d.NAME 
    FROM @T1 d 
    WHERE id = 1 

    EXCEPT 

    SELECT i.NAME 
    FROM @T2 i 
    WHERE id = 1 
    ) A 

UNION 

SELECT LName 
FROM (
    SELECT d.LName 
    FROM @T1 d 
    WHERE id = 1 

    EXCEPT 

    SELECT i.LName 
    FROM @T2 i 
    WHERE id = 1 
    ) B 
+0

謝謝。是的,我們可以通過上面的代碼實現它。但是,如果像100,120等大量列,我們必須寫更多的語句。那麼還有其他方法可以找到它嗎? – GreenSoft