Sql server SQL Server 2012:使用条件检查重复项

Sql server SQL Server 2012:使用条件检查重复项,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,在SQL Server 2012上,我有一个类似的表,如下所示: Id | SessionId | TypeId | Operation | Data ------------------------------------------------------------------------ 1 | ABC-123 | 6 | I |<Record EmployeeName="Joe" /> 2 | ABC-123 | 6

在SQL Server 2012上,我有一个类似的表,如下所示:

Id  | SessionId  | TypeId  | Operation  | Data
------------------------------------------------------------------------
1   | ABC-123    | 6       | I          |<Record EmployeeName="Joe" />
2   | ABC-123    | 6       | U          |<Record EmployeeName="Joe" />
你能帮忙吗

DECLARE @t TABLE (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    SessionId VARCHAR(50),
    TypeId INT,
    Operation CHAR(1),
    Data XML
)

INSERT INTO @t (SessionId, TypeId, Operation, Data)
VALUES
    ('ABC-123', 6, 'I', '<Record EmployeeName="Joe" />'),
    ('ABC-123', 6, 'U', '<Record EmployeeName="Joe" />')

;WITH CTE AS (
    SELECT *,
           RN = ROW_NUMBER() OVER (PARTITION BY [SessionId], CHECKSUM(CAST([Data] AS NVARCHAR(MAX))) ORDER BY Id)
    FROM @t
)
DELETE FROM CTE
WHERE RN > 1
    AND Operation = 'U'

SELECT * FROM @t
输出-

Id  SessionId    TypeId      Operation Data
--- ------------ ----------- --------- ------------------------------
1   ABC-123      6           I         <Record EmployeeName="Joe" />

您正在忽略DELETE语句中的行号。
Id  SessionId    TypeId      Operation Data
--- ------------ ----------- --------- ------------------------------
1   ABC-123      6           I         <Record EmployeeName="Joe" />