Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Atomizasyon, bir öğenin türlenmiş değerini ayıklama işlemidir. Bu işlem belirli koşullar altında ima edilir. Aritmetik ve karşılaştırma işleçleri gibi bazı XQuery işleçleri bu işleme bağlıdır. Örneğin, doğrudan düğümlere aritmetik işleçler uyguladığınızda, bir düğümün yazılan değeri ilk olarak veri işlevi örtük olarak çağrılarak alınır. Bu, atomik değeri aritmetik işlecine işlenen olarak geçirir.
Örneğin, aşağıdaki sorgu özniteliklerin toplamını LaborHours döndürür. Bu durumda, data() öznitelik düğümlerine örtük olarak uygulanır.
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)');
Gerekli olmasa da, işlevi açıkça belirtebilirsiniz data() :
SELECT @x.query('sum(data(ROOT/Location/@LaborHours))');
Örtük atomizasyona bir diğer örnek de aritmetik işleçler kullanmanızdır.
+ işleci atomik değerler gerektirir ve data() özniteliğin atomik değerini LaborHours almak için örtük olarak uygulanır. Sorgu, ProductModel tablosundaki xml türünün Instructions sütununda belirtilir. Aşağıdaki sorgu özniteliğini LaborHours üç kez döndürür. Sorguda şunları göz önünde bulundurun:
özniteliğini
OriginalLaborHoursoluştururken, atomizasyon tarafından$WC/@LaborHoursdöndürülen tekil diziye örtük olarak uygulanır. özniteliğininLaborHoursyazılan değeri öğesineOriginalLaborHoursatanır.özniteliğini
UpdatedLaborHoursV1oluştururken aritmetik işleci atomik değerler gerektirir. Bu nedenle,data()tarafından$WC/@LaborHoursdöndürülen özniteliğineLaborHoursörtük olarak uygulanır. Ardından 1 atomik değeri eklenir. özniteliğininUpdatedLaborHoursV2oluşturulması açık uygulamasınıdata()gösterir, ancak gerekli değildir.
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;
Sonuç şu şekildedir:
<WC OriginalLaborHours="2.5"
UpdatedLaborHoursV1="3.5"
UpdatedLaborHoursV2="3.5" />
Atomizasyon basit bir tür, boş bir küme veya statik tür hatasıyla sonuçlanır.
Atomizasyon, işlevlere geçirilen karşılaştırma ifadesi parametrelerinde, işlevler tarafından döndürülen değerlerde, cast() ifadelerde ve order by yan tümcesinde geçirilen sıralama ifadelerinde de gerçekleşir.