Sql:variable и sql:column

Может сложиться ситуация, когда в запросе XQuery нужно получить значение поля sql-запроса или внешней переменной. Для таких целей в SQL Server-е введены две функции расширения: variable и column, которые должны находиться в неком пространстве имен с префиксом sql. Если в запросе объявляется какое-либо пространство имен с тем же префиксом sql, выше обозначенные функции становятся недоступными. Надеюсь, эту ошибку, как и бесчисленное множество других, разработчики поправят к релизу.

В функцию sql:variable передается один параметр – строковый литерал, значение которого трактуется как имя переменной простого типа во внешней области видимости. Функция возвращает скалярное значение этой переменной. Например:

declare @xml xmlset @xml = '<fam> <husband income="180">alex</husband> <wife income="161">rosa</wife> <son income="90">dima</son></fam>' declare @i intset @i = 150select @xml::query('/fam/*[@income < sql:variable("@i")]')

Здесь выбираются все дочерние элементы fam, у которых атрибут income меньше значения внешней переменной i.

Похожим образом используется функция sql:column. Она позволяет получить значение поля из внешнего запроса.

Например, следующий запрос содержит в себе XQuery-подзапрос, обращающийся к колонке id внешнего SQL-запроса.

select fam::query('<fam id = "{sql:column("id")}"> {/fam/*} </fam>')from fams

Результат:

<fam id="1"> <husband income="180">alex</husband> <wife income="161">rosa</wife> <son income="90">dima</son></fam>

С помощью этой функции нельзя обращаться к колонкам XML-типа.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: