Функция last (XQuery)
Возвращает количество элементов в обрабатываемой в данный момент последовательности. Точнее, эта функция возвращает целочисленный индекс последнего элемента в последовательности. Значение индекса первого элемента в последовательности — 1.
Синтаксис
fn:last() as xs:integer
Замечания
В SQL Server функция fn:last() может быть использована в контексте контекстно-зависимого предиката. Точнее, ее использование возможно только внутри квадратных скобок ([ ]).
Примеры
В этом подразделе приведены примеры запросов XQuery к XML-экземплярам, которые хранятся в различных столбцах типа xml в базе данных AdventureWorks. Обзор каждого из этих столбцов см. в разделе Представление типов XML-данных в базе данных AdventureWorks.
А. Использование функции last() XQuery для получения последних двух этапов производства
Следующий запрос получает последние два этапа производства для определенной модели продукта. Значение, количество этапов производства, возвращаемое функцией last(), используется в этом запросе для получения последних двух этапов производства.
SELECT ProductModelID, Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<LastTwoManuSteps>
<Last-1Step>
{ (/AWMI:root/AWMI:Location)[1]/AWMI:step[(last()-1)]/text() }
</Last-1Step>
<LastStep>
{ (/AWMI:root/AWMI:Location)[1]/AWMI:step[last()]/text() }
</LastStep>
</LastTwoManuSteps>
') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
В предыдущем запросе функция last() в выражении //AWMI:root//AWMI:Location)[1]/AWMI:step[last()] возвращает количество этапов производства. Это значение используется для получения последнего этапа производства на участке цеха.
Результат:
ProductModelID Result
-------------- -------------------------------------
7 <LastTwoManuSteps>
<Last-1Step>
When finished, inspect the forms for defects per
Inspection Specification .
</Last-1Step>
<LastStep>Remove the frames from the tool and place them
in the Completed or Rejected bin as appropriate.
</LastStep>
</LastTwoManuSteps>