У меня есть набор таблиц (с несколькими отношениями один-много), которые образуют единую «единицу». Мне нужно обеспечить, чтобы мы отсеивали дубликаты, но для определения дубликатов требуется рассмотрение всех данных.Идентифицировать повторяющиеся узлы 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 - A 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
Будет делать, хотя выходного формата я не так суетился, пока я могу сравнить две единицы и идентифицировать уникальность - будь то одна строка со всеми значениями или большая таблица со всеми столбцами для всех объединенных строк, Я не против. –
Это хорошо, но на основе результатов, которые генерирует ваша скрипка, я не уверен, как вы определяете уникальность, поэтому, если вы можете использовать то, что должно выглядеть на выходе, вы можете получить дополнительную помощь в создании этого вывода. – Tanner