我有一組表格(有幾個一對多關係),形成一個單元。我需要確保我們清除重複項,但確定重複項需要考慮所有數據。確定重複的Xml節點
更糟的是,有問題的數據庫仍然處於Sql 2000兼容模式,所以它不能使用任何更新的功能。
Create Table UnitType
(
Id int IDENTITY Primary Key,
Action int not null,
TriggerType varchar(25) not null
)
Create Table Unit
(
Id int IDENTITY Primary Key,
TypeId int Not Null,
Message varchar(100),
Constraint FK_Unit_Type Foreign Key (TypeId) References UnitType(Id)
)
Create Table Item
(
Id int IDENTITY Primary Key,
QuestionId int not null,
Sequence int not null
)
Create Table UnitCondition
(
Id int IDENTITY Primary Key,
UnitId int not null,
Value varchar(10),
ItemId int not null
Constraint FK_UnitCondition_Unit Foreign Key (UnitId) References Unit(Id),
Constraint FK_UnitCondition_Item Foreign Key (ItemId) References Item(Id)
)
Insert into Item (QuestionId, Sequence)
Values (1, 1),
(1, 2)
Insert into UnitType(Action, TriggerType)
Values (1, 'Changed')
Insert into Unit (TypeId, Message)
Values (1, 'Hello World'),
(1, 'Hello World')
Insert into UnitCondition(UnitId, Value, ItemId)
Values (1, 'Test', 1),
(1, 'Hello', 2),
(2, 'Test', 1),
(2, 'Hello', 2)
我創建了一個SqlFiddle,演示了此問題的一種簡單形式。
甲單位被認爲是與在單元中的所有(非-ID)字段,以及對組合在每一個細節被精確匹配該股所有條件重複。考慮到這,如XML - 一個Unit
節點(包含單位信息和條件的子集)是獨一無二的,如果沒有其他Unit
節點存在是一個確切的字符串複製
Select
Action,
TriggerType,
U.TypeId,
U.Message,
(
Select C.Value, C.ItemId, I.QuestionId, I.Sequence
From UnitCondition C
Inner Join Item I on C.ItemId = I.Id
Where C.UnitId = U.Id
For XML RAW('Condition')
) as Conditions
from UnitType T
Inner Join Unit U on T.Id = U.TypeId
For XML RAW ('Unit'), ELEMENTS
但我有問題,我似乎無法讓每個單元的XML顯示爲新記錄,而且我不確定如何比較單元節點以查找重複。
如何運行此查詢以確定集合中是否存在重複的Xml Unit
節點?
你可以添加你想要的輸出嗎? – Tanner 2014-08-29 14:24:36
雖然輸出格式我不那麼討厭,但只要我可以比較兩個單位並確定唯一性 - 無論這是一個包含所有值的單個字符串,還是包含所有行的所有列組合的大表,我不介意。 – 2014-08-29 14:26:26
這很好,但是根據你的小提琴的輸出結果,我不確定你是如何識別唯一性的,所以如果你可以手工製作輸出應該是什麼樣的,你可能會得到更多的幫助來產生輸出。 – Tanner 2014-08-29 14:31:27