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

Откуда:
Сообщений: 6
Доброго времени суток,

В базе данных у меня есть таблица хранящая xml данные такого вида:

<Word>
  <Variant Id="c8b93274-0ffd-49ee-89da-7da900ed84cd" Value="Theatre" Description="Театр, род искуства" />
  <Variant Id="4e2df596-2d12-4056-bbc1-c500ed60a1f8" Value="Theatre" Description="Театр, театральный коллектив; здание; зрители в зале" />
  <Variant Id="3c07f852-475b-4f47-9cb5-b340b29fa3d3" Value="Playhouse" Description="Театр, театральный коллектив; здание; зрители в зале (синоним)" />
</Word>


Мне нужно удалять элементы Variant по их Id - для этого я использую такой запрос:

update dbo.EnglishVocabulary
		set 
			Word = dbo.DeleteWordTranslationVariant(Word, @translationVariantId) 
		where 
			Id = @id 


Где dbo.DeleteWordTranslationVariant функция, вот она:

create function dbo.DeleteWordTranslationVariant (
	@translationVariants xml
	, @id uniqueidentifier)
returns xml 
as
begin
	
	declare @variant_id nvarchar(100)
	
	set @variant_id = convert(nvarchar(100), @id);
	
	set @translationVariants.modify('delete /Word/Variant[@Id=sql:variable("@variant_id")]');
	
	return @translationVariants
end


так вот - запрос выполняется без ошибок, но результат никакого, т.к. xquery запрос не находит элемент с нужным значением Id,
а вот если я заменяю sql:variable("@variant_id") на непосредственное значение Id, т.е. например на "c8b93274-0ffd-49ee-89da-7da900ed84cd"

запрос отрабатывает как надо и удаляет запись. Так вот вопрос, что не так с sql:variable("@variant_id") - как нужно подставлять переменную в xquery запрос, чтобы всё корректно работало???
9 мар 12, 17:01    [12218037]     Ответить | Цитировать Сообщить модератору
 Re: sql:variable в xquery запросах  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
Известный баг.
Вылечить можно, например, так:
declare
  @xml xml,
  @id uniqueidentifier;
set @xml=N'
<Word>
  <Variant Id="c8b93274-0ffd-49ee-89da-7da900ed84cd" Value="Theatre" Description="Театр, род искуства" />
  <Variant Id="4e2df596-2d12-4056-bbc1-c500ed60a1f8" Value="Theatre" Description="Театр, театральный коллектив; здание; зрители в зале" />
  <Variant Id="3c07f852-475b-4f47-9cb5-b340b29fa3d3" Value="Playhouse" Description="Театр, театральный коллектив; здание; зрители в зале (синоним)" />
</Word>';
set @id='C8B93274-0FFD-49EE-89DA-7DA900ED84CD';
select
  t.n.value('@Id','uniqueidentifier') id,
  t.n.value('@Value','varchar(100)') Value
from @xml.nodes('/Word/Variant[fn:upper-case(@Id)=sql:variable("@id")]') t(n)
9 мар 12, 17:49    [12218142]     Ответить | Цитировать Сообщить модератору
 Re: sql:variable в xquery запросах  [new]
BAntDit
Member

Откуда:
Сообщений: 6
Спасибо, помогло.
9 мар 12, 18:02    [12218169]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить