Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Vrátí součet posloupnosti čísel.
Syntax
fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType
Argumenty
$arg
Posloupnost atomických hodnot, jejichž součet se má vypočítat
Poznámky
Všechny typy atomizovaných hodnot, které jsou předány sum() musí být podtypy stejného základního typu. Základní typy, které jsou přijímány, jsou tři předdefinované číselné základní typy nebo xdt:untypedAtomic. Hodnoty typu xdt:untypedAtomic se přetypují na xs:double. Pokud existuje kombinace těchto typů nebo pokud jsou předány jiné hodnoty jiných typů, vyvolá se statická chyba.
Výsledek sum() obdrží základní typ předaných v typech, jako je xs:double v případě xdt:untypedAtomic, i když vstup je volitelně prázdná sekvence. Pokud je vstup staticky prázdný, výsledek je 0 se statickým a dynamickým typem xs:integer.
Funkce sum() vrátí součet číselných hodnot. Pokud xdt:untypedAtomic hodnotu nelze přetypovat na xs:double, hodnota je ignorována ve vstupní sekvenci $arg. Pokud je vstup dynamicky počítanou prázdnou sekvencí, vrátí se hodnota 0 použitého základního typu.
Funkce vrátí chybu za běhu, když dojde k přetečení nebo výjimce mimo rozsah.
Příklady
Toto téma obsahuje příklady XQuery pro instance XML, které jsou uloženy v různých xml sloupce typu v databázi AdventureWorks2022
.
A. Použití funkce sum() XQuery k nalezení celkového kombinovaného počtu pracovních hodin pro všechna místa pracovního centra ve výrobním procesu
Následující dotaz najde celkovou pracovní dobu pro všechna umístění pracovních center ve výrobním procesu všech modelů produktů, pro které jsou výrobní pokyny uloženy.
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
Jedná se o částečný výsledek.
<ProductModel PMID="7" ProductModelName="HL Touring Frame">
<TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
<TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...
Místo vrácení výsledku jako XML můžete napsat dotaz pro generování relačních výsledků, jak je znázorněno v následujícím dotazu:
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
Jedná se o částečný výsledek:
ProductModelID Name TotalLaborHours
-------------- -------------------------------------------------
7 HL Touring Frame 12.75
10 LL Touring Frame 13
43 Touring Rear Wheel 3
...
Omezení implementace
Toto jsou omezení:
Podporuje se pouze verze jednoho argumentu sum().
Pokud je vstup dynamicky počítanou prázdnou sekvencí, vrátí se místo typu xs:integer hodnota 0 použitého základního typu.
Funkce sum() mapuje všechna celá čísla na xs:decimal.
Funkce sum() pro hodnoty typu xs:duration není podporována.
Sekvence, které kombinují typy napříč hranicemi základního typu, se nepodporují.
Sum((xs:double("INF"), xs:double("-INF"))) vyvolá chybu domény.
Viz také
funkce XQuery proti datového typu XML