Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server
Возвращает целочисленное значение, указывающее позицию контекстного элемента в последовательности обрабатываемых в данный момент элементов.
Синтаксис
fn:position() as xs:integer
Замечания
В SQL Server fn:position() можно использовать только в контексте предиката, зависящей от контекста. Конкретно ее можно использовать только внутри квадратных скобок ([]). Сравнение с данной функцией не приводит к снижению количества элементов в процессе статического определения типов.
Примеры
В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типа XML в AdventureWorks2025 базе данных.
А. Использование функции position() в запросе XQuery для получения первых двух характеристик продукта
Следующий запрос извлекает первые две функции, первые два дочерних <Features> элемента элемента из описания каталога моделей продуктов. Если есть больше возможностей, он добавляет <there-is-more/> элемент в результат.
SELECT CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product>
{ /pd:ProductDescription/@ProductModelID }
{ /pd:ProductDescription/@ProductModelName }
{
for $f in /pd:ProductDescription/pd:Features/*[position()<=2]
return
$f
}
{
if (count(/pd:ProductDescription/pd:Features/*) > 2)
then <there-is-more/>
else ()
}
</Product>
') as x
FROM Production.ProductModel
WHERE CatalogDescription is not null
Обратите внимание на следующие данные из предыдущего запроса:
Ключевое слово пространства имен в XQuery Prolog определяет префикс пространства имен, используемый в тексте запроса.
Текст запроса создает XML, имеющий <элемент Product> с атрибутами ProductModelID и ProductModelName , и имеет функции продукта, возвращаемые в качестве дочерних элементов.
Функция position() используется в предикате для определения положения дочернего <элемента Features> в контексте. Если он является первой или второй функцией, он возвращается.
Оператор IF добавляет элемент <"есть-больше" в> результат, если в каталоге продуктов есть более двух функций.
Так как не для всех моделей продуктов их описание из каталога хранится в таблице, используется предложение WHERE для отсева строк, для которых значение CatalogDescriptions равно NULL.
Частичный результат:
<Product ProductModelID="19" ProductModelName="Mountain 100">
<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p1:WarrantyPeriod>3 year</p1:WarrantyPeriod>
<p1:Description>parts and labor</p1:Description>
</p1:Warranty>
<p2:Maintenance xmlns:p2="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p2:NoOfYears>10</p2:NoOfYears>
<p2:Description>maintenance contact available through your dealer or
any AdventureWorks retail store.</p2:Description>
</p2:Maintenance>
<there-is-more/>
</Product>
...