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

Откуда:
Сообщений: 2152
Хочу выбрать ноды из ф-и, которая возвращает XML
SELECT x.Rec.value('.', 'VARCHAR(500)')
FROM dbo.fnGetDriverContactsXML('0b0641ef-9e42-11e5-b8fd-18a90550aa54', 'auto').nodes('/') AS x(Rec)

Incorrect syntax near '.'.

Если XML сохранить в переменную, то работает
но мне такой вариант не подходит, так этот запрос будет оформлен подзапросом и гуид будет меняться

подскажите, как правильно сделать выборку
Спасибо
23 июл 18, 17:22    [21595053]     Ответить | Цитировать Сообщить модератору
 Re: SELECT FROM XML FUNCTION  [new]
listtoview
Member

Откуда:
Сообщений: 2152
Я конечно извратился

	SELECT t.cl
	FROM (
		SELECT xml_col.xml_col
		FROM (SELECT xml_col = CAST(dbo.fnGetDriversContactsXML('0b0641ef-9e42-11e5-b8fd-18a90550aa54', 'auto') AS XML)) AS xml_col
	) AS tb
	OUTER APPLY (
		SELECT x.Rec.value('.', 'VARCHAR(MAX)') AS cl
		FROM tb.xml_col.nodes('cont_value') as x(Rec)		
		) AS t


смотреть страшно
23 июл 18, 17:29    [21595075]     Ответить | Цитировать Сообщить модератору
 Re: SELECT FROM XML FUNCTION  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
а что за xml возвращает ваша функция fnGetDriverContactsXML, пример можете привести
23 июл 18, 17:29    [21595077]     Ответить | Цитировать Сообщить модератору
 Re: SELECT FROM XML FUNCTION  [new]
listtoview
Member

Откуда:
Сообщений: 2152
Konst_One
а что за xml возвращает ваша функция fnGetDriverContactsXML, пример можете привести

без рутовой ноды

<cont_value>111</cont_value>
<cont_value>222</cont_value>
23 июл 18, 17:30    [21595084]     Ответить | Цитировать Сообщить модератору
 Re: SELECT FROM XML FUNCTION  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
SELECT x.Rec.value('.', 'VARCHAR(500)')
FROM dbo.fnGetDriverContactsXML('0b0641ef-9e42-11e5-b8fd-18a90550aa54', 'auto').nodes('/cont_value[0]') AS x(Rec)


а так, возваращает?
23 июл 18, 17:32    [21595090]     Ответить | Цитировать Сообщить модератору
 Re: SELECT FROM XML FUNCTION  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
declare @x xml = '<cont_value>111</cont_value><cont_value>222</cont_value>';
SELECT x.Rec.value('.', 'VARCHAR(500)')
FROM @x.nodes('/cont_value') AS x(Rec)
23 июл 18, 17:33    [21595093]     Ответить | Цитировать Сообщить модератору
 Re: SELECT FROM XML FUNCTION  [new]
Дед-Папыхтет
Member [заблокирован]

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

create table txml (
	id int primary key,
	x xml
)
insert txml values (1,'<r1><r2>hello</r2><r2>world</r2></r1>'),(2,'<r1><r2>привет</r2><r2>мир</r2></r1>');
go
create function dbo.fnGetXML (@id int)
returns table as return
	select x from dbo.txml where id = @id
go

select t.id, f.x, r.*
from	(
		values (1),(2)
		) t(id)
cross apply dbo.fnGetXML(id) f
cross apply	(
				select c.value('(.)[1]','varchar(500)') res
				from f.x.nodes('/r1/r2') x(c)
			) r
23 июл 18, 17:33    [21595094]     Ответить | Цитировать Сообщить модератору
 Re: SELECT FROM XML FUNCTION  [new]
listtoview
Member

Откуда:
Сообщений: 2152
Через переменную у меня тож работает
надо через ф-ю

Вот так удалось победить

	SELECT t.cl
	FROM (
		SELECT dbo.fnGetDriversContactsXML('0b0641ef-9e42-11e5-b8fd-18a90550aa54', 'auto') AS tt		
	) AS tb
	OUTER APPLY (
		SELECT x.Rec.value('.', 'VARCHAR(MAX)') AS cl
		FROM tb.tt.nodes('cont_value') as x(Rec)		
		) AS t


К сообщению приложен файл. Размер - 9Kb
23 июл 18, 17:35    [21595098]     Ответить | Цитировать Сообщить модератору
 Re: SELECT FROM XML FUNCTION  [new]
listtoview
Member

Откуда:
Сообщений: 2152
вообще говоря вопрос снят
через OUTER APPLY работает
23 июл 18, 17:36    [21595101]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить