Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server
Атомизация — это процесс извлечения типизированного значения элемента. В определенных обстоятельствах подразумевается, что этот процесс будет осуществлен. Некоторые из операторов XQuery (например, арифметические и операторы сравнения), зависят от этого процесса. Например, при применении арифметических операторов непосредственно к узлам типизированное значение узла сначала извлекается путем неявного вызова функции данных. При этом атомарное значение передается в качестве операнда арифметическому оператору.
Например, следующий запрос возвращает общее количество LaborHours атрибутов. В этом случае data() неявно применяется к узлам атрибутов.
DECLARE @x AS XML;
SET @x = '<ROOT><Location LID="1" SetupTime="1.1" LaborHours="3.3" />
<Location LID="2" SetupTime="1.0" LaborHours="5" />
<Location LID="3" SetupTime="2.1" LaborHours="4" />
</ROOT>';
-- data() implicitly applied to the attribute node sequence.
SELECT @x.query('sum(/ROOT/Location/@LaborHours)');
Хотя это не обязательно, можно также явно указать функцию data() :
SELECT @x.query('sum(data(ROOT/Location/@LaborHours))');
Другой пример неявной атомизации — использование арифметических операторов. Оператор + требует атомарных значений и data() неявно применяется для получения атомарного значения атрибута LaborHours . Запрос указан в столбце "Инструкции" типа XML в таблице ProductModel. Следующий запрос возвращает LaborHours атрибут три раза. В запросе рассмотрим:
При создании атрибута
OriginalLaborHoursатомизация неявно применяется к однотонной последовательности, возвращаемой$WC/@LaborHours. Типизированное значениеLaborHoursатрибута назначаетсяOriginalLaborHours.При создании атрибута
UpdatedLaborHoursV1арифметический оператор требует атомарных значений. Поэтому неявно применяется к атрибуту,data()возвращаемогоLaborHours$WC/@LaborHours. Затем к нему добавляется атомарное значение 1. Построение атрибутаUpdatedLaborHoursV2показывает явное применениеdata(), но не требуется.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $WC in /AWMI:root/AWMI:Location[1]
return
<WC OriginalLaborHours = "{ $WC/@LaborHours }"
UpdatedLaborHoursV1 = "{ $WC/@LaborHours + 1 }"
UpdatedLaborHoursV2 = "{ data($WC/@LaborHours) + 1 }" >
</WC>') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 7;
Ниже приведен результат:
<WC OriginalLaborHours="2.5"
UpdatedLaborHoursV1="3.5"
UpdatedLaborHoursV2="3.5" />
Атомизация приводит к экземпляру простого типа, пустому множеству или к ошибке статического типа.
Атомизация также возникает в параметрах выражения сравнения, передаваемых функциям, значениям, возвращаемым функциями, cast() выражениями и упорядочиванием выражений, передаваемых в порядке по предложению.