如果你想看到和/或跟踪更改合并
Declare @UserLocal table (UserId int,UserCode varchar(50),FirstName varchar(50),LastName varchar(50))
Insert Into @UserLocal values (12345,'ABC','John','Doe')
Declare @UserNew table (UserId int,UserCode varchar(50),FirstName varchar(50),LastName varchar(50))
Insert Into @UserNew values (12345,'XYZ','Johnnny','Doe')
Declare @XML xml
Set @XML = (Select * From (Select Ver=0,* from @UserLocal Union All Select Ver=1,* from @UserNew) A for XML RAW)
;with cteBase as (
Select UserId = r.value('@UserId','int')
,Ver = r.value('@Ver','int')
,Item = Attr.value('local-name(.)','varchar(max)')
,Value = Attr.value('.','varchar(max)')
From @XML.nodes('/row') AS A(r)
Cross Apply A.r.nodes('./@*[local-name(.)!="Ver"]') AS B(Attr)
)
,cteExt as (Select *,LastValue =Lag(Value) over (Partition By UserID,Item Order by Ver) From cteBase)
Select UserID
,Item
,Before=LastValue
,After =Value
From cteExt
Where Value<>LastValue and LastValue is not null
Order By UserID,Item
返回
之前
两个表中的'UserId'主键?请显示DDL。 – Serg
它没有设置为主键,但值是唯一的 –
您在上面的查询中有sn.Student_ID_Number = sn.Student_ID_Number - 因此多行:-)是否应该是sn.Student_ID_Number = s.Student_ID_Number? – bhs