none
sql:variable в xquery запросах. RRS feed

  • Вопрос

  • Доброго времени суток,

    В базе данных у меня есть таблица хранящая 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 марта 2012 г. 10:39

Ответы

Все ответы