Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разбор XML из столбца таблицы через cross apply = бесконечное ожидание  [new]
DevIgo
Member

Откуда:
Сообщений: 25
Хочу разобрать XML из колонки таблицы.
В случае если в базовой таблице я использую top 1, все ок
Во всех остальных случаях (например top 2), получаю бесконечное ожидание результата разбора XML. В том числе я даже предварительный план запроса не могу посмотреть.

Я что то не так делаю?

Псевдокод:
select
c.documentNumber
from  (
	select top 2
	try_cast(d.data as xml) xmlData
	from dbo.documents as d with(nolock)
	) B
cross apply (
			select
			header.col.value('(Док/Номер)[1]', 'varchar(500)') documentNumber
			from B.xmlData.nodes('/Файл/Документ') header(col)
            ) C
14 ноя 19, 10:46    [22015940]     Ответить | Цитировать Сообщить модератору
 Re: Разбор XML из столбца таблицы через cross apply = бесконечное ожидание  [new]
tunknown
Member

Откуда:
Сообщений: 748
Что, если попробовать разбить на шаги, чтобы попытаться увидеть план? Например, для начала избавиться от try_cast через временную таблицу с полем в декларированном типе xml.
14 ноя 19, 12:49    [22016113]     Ответить | Цитировать Сообщить модератору
 Re: Разбор XML из столбца таблицы через cross apply = бесконечное ожидание  [new]
DevIgo
Member

Откуда:
Сообщений: 25
tunknown,

Как раз так и сделал вынес подзапрос с try_cast во временную таблицу, стало работать, спасибо
14 ноя 19, 13:04    [22016135]     Ответить | Цитировать Сообщить модератору
 Re: Разбор XML из столбца таблицы через cross apply = бесконечное ожидание  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
DevIgo,

попробуйте вынести подзапрос cross apply в скалярную функцию, в этом случае запрос будет работать как ожидалось.
14 ноя 19, 14:19    [22016264]     Ответить | Цитировать Сообщить модератору
 Re: Разбор XML из столбца таблицы через cross apply = бесконечное ожидание  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4379
DevIgo,

А вот так просто нельзя записать?

select
	header.col.value('(Док/Номер)[1]', 'varchar(500)') documentNumber
from dbo.documents B
cross apply B.xmlData.nodes('/Файл/Документ') header(col)
14 ноя 19, 14:54    [22016335]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить