Sql server SQL Server 2012:使用条件检查重复项
在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
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" />