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

Откуда: из-за границы
Сообщений: 2113
SQL 2008
примерно такой запрос

select T.Item.query('
<ROOT>
{
	for $t in //ITEM
		let $b:= $t/PARAM
		for $e in $b
			let $tag:=$e/BSNAME/text()
			let $val:=$e/BSVALUE/text()
			where ( $e/BSNAME='ID' or  $e/BSNAME='UDF1' or  $e/BSNAME='UDF2')
			return element  { string($tag) } {string($val) }
}		
</ROOT>	

')

нужно создать диманически только определённые элементы со значениями

не работает ошибка

XQuery [query()]: Only constant expressions are supported for the name expression of computed element and attribute constructors.

может кто то может посоветовать что либо?
спасибо
25 мар 15, 09:46    [17427999]     Ответить | Цитировать Сообщить модератору
 Re: XQUERY создать динамические элементы со значениям  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
XML примерно такой

<ROOT>
<ITEM>
		<PARAM>
			<BSNAME>ID</BSNAME>
			<BSVALUE>111</BSVALUE>
		</PARAM>
		<PARAM>
			<BSNAME>UDF1</BSNAME>
			<BSVALUE>РРР</BSVALUE>
		</PARAM>
              .............................
</ITEM>
<ITEM>
		<PARAM>
			<BSNAME>ID</BSNAME>
			<BSVALUE>222</BSVALUE>
		</PARAM>
		<PARAM>
			<BSNAME>UDF1</BSNAME>
			<BSVALUE>ККК</BSVALUE>
		</PARAM>
              .............................
</ITEM>
</ROOT>
25 мар 15, 09:50    [17428013]     Ответить | Цитировать Сообщить модератору
 Re: XQUERY создать динамические элементы со значениям  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
michael R,

как-то так:

select @xml.query('<ROOT>
{
	for $t in //ITEM
		let $b:= $t/PARAM
		for $e in $b
			let $tag:=$e/BSNAME/text()
			let $val:=$e/BSVALUE/text()
			where ( $e/BSNAME="ID" or  $e/BSNAME="UDF1" or  $e/BSNAME="UDF2")
			return 
             if ($tag="ID") then element ID {string($val[1]) } 
        else if ($tag="UDF1") then element UDF1 {string($val[1]) }
        else if ($tag="UDF2") then element UDF2 {string($val[1]) }
        else ()
}		
</ROOT>')
25 мар 15, 11:43    [17428730]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить