Не уверен, что этот вопрос приводит к некоторой низкой производительности в будущем, но, кажется, по крайней мере, сейчас он чувствует себя "лучше" ..
Я пытаюсь сделать следующее:
У меня есть таблица CONTACTS, в которой, помимо прочего, есть поле первичного ключа с именем memberID
У меня также есть поле XML, которое содержит идентификаторы ваших друзей (например) .. например:
<root><id>2</id><id>6</id><id>14</id></root>
Итак, что я пытаюсь сделать с помощью сохраненного процесса, передать ваш идентификатор участника и вернуть всю информацию о ваших друзьях, например:
select name, address, age, dob from contacts
where id... xml join stuff...
Предыдущий способ, которым я пользовалсяон работал (ну вроде!) выделил все узлы XML (/ root / id) во временную таблицу, а затем сделал соединение из этой временной таблицы с таблицей контактов, чтобы получить поля контактов ...
Любая помощь очень ценится ... просто немного перегружена примерами .query .nodes, и, конечно, возможно, это лучший способ сделать это ...
СПАСИБО В СЛУЧАЕ!
<- EDIT -> Я получил что-то работает, но выглядит какзаявление SQL Франкенштейна!По сути, мне нужно было получить идентификаторы контактов друзей из поля XML и заполнить их временной таблицей, например:
Declare @contactIDtable TABLE (ID int)
INSERT INTO @contactIDtable (ID)
SELECT CONVERT(INT,CAST(T2.memID.query('.') AS varchar(100))) AS friendsID
FROM dbo.members
CROSS APPLY memberContacts.nodes('/root/id/text()') AS T2(memID)
Но чёрт!вещь преобразования / приведения выглядит серьезной ... поскольку мне нужно получить INT для следующего бита, который является фактическим соединением, чтобы вернуть контактные данные следующим образом:
SELECT memberID, memberName, memberAddress1
FROM members
INNER JOIN @contactIDtable cid
ON members.memberID = cid.ID
ORDER BY memberName
RESULT ... Хорошо, это работает.в моем случае в моем поле XML memberContacts было 3 узла (в данном случае идентификаторы), а приведенный выше запрос вернул 3 строки данных (memberID, memberName, memberAddress1) ...
Весь смысл этогоКонечно, нужно было попытаться сохранить создание таблицы с множеством соединений, то есть списка всех идентификаторов моих друзей ... просто не уверен, что вышесказанное действительно делает это быстрее и проще ...
Больше идей / более эффективных способов попробоватьсделать это ???