powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Sql Server 2005 xml.modify
1 сообщений из 1, страница 1 из 1
Sql Server 2005 xml.modify
    #37538761
АлекейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть входящий xml, который в общем виде может быть в трех вариантах, к примеру
Declare @xml
Код: plaintext
1.
2.
 1 .	Set @xml = ‘<root><key> 1 </key></root>’
 2 .	Set @xml = ‘<root><key> 1 </key><info></info></root>’
 3 .	Set @xml = ‘<root><key> 1 </key><info>ABCDEF…..</info></root>’
То есть тэг <info> может не быть, может быть но не заполненным, может быть и заполнен.
В хранимой процедуре необходимо преобразовать входящий xml таким образом,
что бы тэг <info> был заполнен обязятельно, информацией получаемой во время выполения процедуры. Исходя из особенностей реализации xml в sql server 2005 получаю, что необходимо
1. В первом случае выполнить команду
Код: plaintext
@xml.modify(‘insert <info>{sql:variable(“@info”)}</info> as last into (/root)[ 1 ]’)
2. Во втором
Код: plaintext
@xml.modify(‘insert text{sql:variable(“@info”)} as last into (/root/info)[ 1 ]’)
3. В третьем
Код: plaintext
@xml.modify(‘replace value of (root/info[ 1 ]/text())[ 1 ] with sql:variable("@info")’)
То есть
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @xml1 xml
declare @xml2 xml
declare @xml3 xml

Set @xml1 = '<root><key>1</key></root>'
Set @xml2 = '<root><key>1</key><info></info></root>'
Set @xml3 = '<root><key>1</key><info>ABCDEF…..</info></root>'

declare @info varchar( 254 )
set @info = 'MDFT..'

set @xml1.modify('insert <info>{sql:variable("@info")}</info> as last into (/root)[1]')
set @xml2.modify('insert text{sql:variable("@info")} as last into (/root/info)[1]')
set @xml3.modify('replace value of (root/info[1]/text())[1] with sql:variable("@info")')

Код: plaintext
select @xml1, @xml2, @xml3
Однако, для того что бы применить нужную команду, нужно еще и проверку @xml.exist(…) не раз выполнить, то есть в реальном случае, на каждое поле большой кусок кода, а в целом на обработку входящего xml вообще портянка. Решил написать процедуру для проверки присвоения значений, но команда типа
Код: plaintext
1.
set @expression1 = '(root/info[1]/text())[1]'
set @xml3.modify('replace value of {sql:variable("@expression1")} with sql:variable("@info")')
, либо


Код: plaintext
SET @xml.modify(' insert {sql:variable("@expression1")} as last into {sql:variable("@expression2")}')
выдает ошибку XQuery [modify()]: An expression was expected
Сообственно вопрос, какие еще пути возможны в xml(Transact-Sql) XML DML?
Дополнительные сборки, библиотеки подключать нельзя, на клиенте эти преобразования тоже нельзя делать.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Sql Server 2005 xml.modify
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]