Запрос к вашему XML может выглядеть примерно так, и я думаю, что ваша структура в порядке.Нет необходимости делать какие-то причудливые XML-вещи для получения необходимой информации.
declare @T table
(
ID int identity primary key,
Records xml
)
insert into @T values('
<visits>
<visit id="000112233">
<costumer>Mr. One Costumer</costumer>
<date>2011-02-10</date>
<employee>MAT01234</employee>
</visit>
<visit id="000112234">
<costumer>Mr. Another Costumer</costumer>
<date>2011-02-12</date>
<employee>MAT01235</employee>
</visit>
<visit id="000112235">
<costumer>Mr. Some Costumer</costumer>
<date>2011-02-12</date>
<employee>MAT01234</employee>
</visit>
<visit id="000112236">
<costumer>Mr. Some Costumer</costumer>
<date>2011-02-15</date>
<employee>MAT01235</employee>
</visit>
</visits>')
select T.ID,
V.X.value('@id', 'nvarchar(10)') as VisitID,
V.X.value('costumer[1]', 'nvarchar(50)') as Costumer,
V.X.value('date[1]', 'date') as [Date],
V.X.value('employee[1]', 'nvarchar(50)') as Employee
from @T as T
cross apply T.Records.nodes('/visits/visit') as V(X)
Результат:
ID VisitID Costumer Date Employee
----------- ---------- -------------------- ---------- --------------------
1 000112233 Mr. One Costumer 2011-02-10 MAT01234
1 000112234 Mr. Another Costumer 2011-02-12 MAT01235
1 000112235 Mr. Some Costumer 2011-02-12 MAT01234
1 000112236 Mr. Some Costumer 2011-02-15 MAT01235