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

Откуда:
Сообщений: 1066
Доброго дня.
declare @x xml = 
'<order>
   <Sub Id=""
            FirstName="@ИВАНОВ"
            MiddleName=""
            LastName="@TEST"/>
</order>
'
set @x.modify('replace value of (/order/Sub[@FirstName="@ИВАНОВ"]/@FirstName)[1]  with "Анноним" ');  

select @x


Подскажите как в modify сделать like, тоесть менять значение в FirstName если его исходное значение начинается на знак @ ?

Спасибо!
18 янв 17, 13:24    [20118241]     Ответить | Цитировать Сообщить модератору
 Re: xml modify...  [new]
Rankatan
Member

Откуда:
Сообщений: 250
declare @x xml = 
'<order>
   <Sub Id=""
            FirstName="@ИВАНОВ"
            MiddleName=""
            LastName="@TEST"/>
      <Sub Id=""
            FirstName="ЫВАВЫА"
            MiddleName=""
            LastName="TEST"/>
      <Sub Id=""
            FirstName="@авава"
            MiddleName=""
            LastName="@TEST"/>                  
</order>
'
set @x.modify('replace value of ((/order/Sub[substring(@FirstName,1,1)="@"])[1]/@FirstName)  with "Анноним" ');  

select @x


Но он заменит только у первой строки. Если убрать [1] то будет ошибка
XQuery [modify()]: The target of 'replace' must be at most one node, found 'attribute(FirstName,xdt:untypedAtom


Для решения похоже нужно while или курсоры
WHILE @count > 0
BEGIN
	
	SET @slots_xml_data.modify('replace value of (//file/@id)[sql:variable("@count")][1] with sql:variable("@count")')
END

вот ссылка
18 янв 17, 13:40    [20118360]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить