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.
Bir sayılar dizisinin toplamını döndürür.
Sözdizimi
fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType
Arguments
$arg
Toplamı hesaplanacak atomik değerler dizisi.
Açıklamalar
sum()'ya iletilen atomize değerlerin tüm türleri aynı baz tipinin alt tipleri olmalıdır. Kabul edilen temel tipler ise üç yerleşik sayısal taban tipi veya xdt:untypedAtomic'dir. xdt:untypedAtomic türü değerleri xs:double olarak yayınlanmıştır. Bu türlerin bir karışımı varsa veya diğer türlerin diğer değerleri geçirilirse, statik bir hata oluşur.
sum() sonucu, xdt:untypedAtomic durumunda xs:double gibi tiplerde geçilen tipin temel tipini alır; girdi isteğe bağlı olarak boş dizi olsa bile. Eğer girdi statik olarak boşsa, sonuç 0 olur ve xs:tam sayı statik ve dinamik türdür.
sum() fonksiyonu, sayısal değerlerin toplamını döndürür. Bir xdt:untypedAtomic değeri xs:double'a bırakılamazsa, değer giriş dizisinde yoksayılır $arg. Eğer girdi dinamik olarak hesaplanan boş bir dizis ise, kullanılan temel türünün 0 değeri döner.
Fonksiyon, taşma veya aralık dışı istisna meydana geldiğinde çalışma zamanı hatası döndürür.
Örnekler
Bu konu, veritabanındaki çeşitli xml türü sütunlarında AdventureWorks2025 depolanan XML örneklerine karşı XQuery örnekleri sağlar.
A. Üretim sürecindeki tüm iş merkezi konumları için toplam çalışma saati sayısını bulmak için summa() XQuery fonksiyonu kullanılarak
Aşağıdaki sorgu, üretim talimatlarının saklandığı tüm ürün modellerinin üretim sürecindeki tüm iş merkezi konumları için toplam çalışma saatlerini bulur.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<ProductModel PMID= "{ sql:column("Production.ProductModel.ProductModelID") }"
ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >
<TotalLaborHrs>
{ sum(//AWMI:Location/@LaborHours) }
</TotalLaborHrs>
</ProductModel>
') as Result
FROM Production.ProductModel
WHERE Instructions is not NULL
Kısmi sonuç budur.
<ProductModel PMID="7" ProductModelName="HL Touring Frame">
<TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
<TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...
Sonucu XML olarak döndürmek yerine, aşağıdaki sorguda gösterildiği gibi ilişkisel sonuçlar üretecek sorgu yazabilirsiniz:
SELECT ProductModelID,
Name,
Instructions.value('declare namespace
AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
sum(//AWMI:Location/@LaborHours)', 'float') as TotalLaborHours
FROM Production.ProductModel
WHERE Instructions is not NULL
Bu kısmi bir sonuçdur:
ProductModelID Name TotalLaborHours
-------------- -------------------------------------------------
7 HL Touring Frame 12.75
10 LL Touring Frame 13
43 Touring Rear Wheel 3
...
Uygulama Sınırlamaları
Sınırlamalar şunlardır:
Sadece sum() 'nin tek argümanlı versiyonu desteklenir.
Eğer girdi dinamik olarak hesaplanan boş bir dizisse, kullanılan taban tipin 0 değeri xs:tam sayı yerine döner.
Sum() fonksiyonu, tüm tam sayıları xs:ondalık olarak eşler.
xs:duration tipindeki değerler üzerindeki summa() fonksiyonu desteklenmez.
Türleri temel tür sınırları arasında karıştıran diziler desteklenmez.
Sum((xs:double("INF"), xs:double("-INF"))) bir alan hatası oluşturur.