Typ systemu (XQuery)
XQuery jest jednoznacznie określony język typy schematów i język słabo wpisanych danych bez typu.Następujące wstępnie zdefiniowane typy XQuery:
Wbudowane typy schematu XML w http://www.w3.org/2001/XMLSchema obszaru nazw.
Typów zdefiniowanych w http://www.w3.org/2004/07/xpath-datatypes obszaru nazw.
W tym temacie opisano poniżej:
Wpisaną wartość zamiast wartości ciąg węzła.
The dane funkcji (XQuery) and the ciąg funkcji (XQuery).
Dopasowywanie typu sekwencji zwracany przez wyrażenie.
Wbudowane typy schematu XML
Wbudowane typy schematów XML mają prefiks obszaru nazw wstępnie zdefiniowanych xs.Niektóre z tych typów to xs:integer i xs:ciąg.Obsługiwane są następujące typy wbudowane.Typów tych można używać podczas tworzenia kolekcja schematu XML.
Po wpisaniu XML podczas badania typu statycznych i dynamicznych węzłów zależy od kolekcja schematu XML skojarzony z kolumna lub zmiennej, którego dotyczy kwerenda.Aby uzyskać więcej informacji o typach statycznych i dynamicznych, zobacz Ocena kwerendy (XQuery) i kontekstu wyrażenia.Na przykład, poniższa kwerenda jest określona przeciwko maszynowy xml kolumna (Instructions).wyrażenie Używa instance of , aby sprawdzić, czy wartość wpisaną LotSize jest zwrócony atrybut xs:decimal typu.
SELECT Instructions.query('
DECLARE namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
data(/AWMI:root[1]/AWMI:Location[@LocationID=10][1]/@LotSize)[1] instance of xs:decimal
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7
To wpisując informację kolekcja schematu XML skojarzony z kolumna.Aby uzyskać więcej informacji, zobacz XML reprezentacji typu danych w bazie danych AdventureWorks2008R2.
Typów zdefiniowanych w obszarze nazw typów danych XPath
Typów zdefiniowanych w http://www.w3.org/2004/07/xpath-datatypes obszaru nazw ma wstępnie prefiks xdt.Poniższe informacje dotyczą następujących typów:
Podczas tworzenia kolekcja schematu XML nie można użyć tych typów.Te typy są używane w systemie typu XQuery i są używane do XQuery i wpisując statyczne.Na przykład, oddanych do typów niepodzielny xdt:untypedAtomic, xdt obszaru nazw.
Podczas badania bez typu XML, statycznych i dynamicznych typ elementu węzłów jest xdt:untyped, i jest typ wartości atrybut xdt:untypedAtomic.Wynik query() Metoda generuje XML bez typu.Oznacza to, że węzłów XML są zwracane jako xdt:untyped i xdt:untypedAtomic, odpowiednio.
xdt:dayTimeDuration i xdt:yearMonthDuration nie są obsługiwane.
W następującym przykładzie określono kwerendy przeciwko zmiennej bez typu XML.Wyrażenie, data(/a[1]), zwraca sekwencji jedną wartość niepodzielny.data() Funkcja zwraca wartość elementu <a>.Ponieważ XML poszukiwanych bez typu, zwrócona wartość jest xdt:untypedAtomic.Dlatego instance of zwraca wartość true.
DECLARE @x xml
SET @x='<a>20</a>'
SELECT @x.query( 'data(/a[1]) instance of xdt:untypedAtomic' )
Zamiast pobierać wpisaną wartość wyrażenie (/a[1]) w następującym przykładzie zwraca sekwencja jednego elementu, element <a>.instance of Wyrażenie test element do sprawdzenia wartości zwróconej przez wyrażenie węzeł elementu z xdt:untyped type.
DECLARE @x xml
SET @x='<a>20</a>'
-- Is this an element node whose name is "a" and type is xdt:untyped.
SELECT @x.query( '/a[1] instance of element(a, xdt:untyped?)')
-- Is this an element node of type xdt:untyped.
SELECT @x.query( '/a[1] instance of element(*, xdt:untyped?)')
-- Is this an element node?
SELECT @x.query( '/a[1] instance of element()')
Ostrzeżenie
Kiedy wykonywana jest kwerenda maszynowy XML wystąpienie i wyrażenie kwerendy obejmuje oś nadrzędna, statyczne informacje wynikowego węzłów nie jest już dostępny.Typ dynamicznego jest jednak nadal skojarzona z węzłów.
Wpisane wartości vs.Wartość ciągu
Każdy węzeł ma wartość wpisaną i wartość ciąg.Wpisane dane XML wpisz wartość wpisaną jest dostarczana przez kolekcja schematu XML skojarzony z kolumna lub zmiennej, którego dotyczy kwerenda.Bez typu danych XML jest typ wartości wpisywanych xdt:untypedAtomic.
Można użyć data() lub string() funkcja, aby pobrać wartość węzła:
dane funkcji (XQuery) Zwraca wartość wpisaną węzła.
ciąg funkcji (XQuery) Zwraca wartość ciąg węzła.
W następujących kolekcja schematu XML <root> zdefiniowanych w elemencie typu integer:
CREATE XML SCHEMA COLLECTION SC AS N'
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root" type="integer"/>
</schema>'
GO
W poniższym przykładzie wyrażenie najpierw pobiera wartość wpisaną /root[1] , a następnie dodaje 3 do niej
DECLARE @x xml(SC)
SET @x='<root>5</root>'
SELECT @x.query('data(/root[1]) + 3')
W kolejnym przykładzie wyrażenie zawiedzie, ponieważ string(/root[1]) wyrażenie zwraca wartość typu ciąg.Wartość ta jest następnie przekazywane operator arytmetyczny, które przyjmuje tylko wartości liczbowe typu jako argumentów.
-- Fails because the argument is string type (must be numeric primitive type).
DECLARE @x xml(SC)
SET @x='<root>5</root>'
SELECT @x.query('string(/root[1]) + 3')
Poniższy przykład oblicza sumę LaborHours atrybuty.data() funkcja pobiera wartości wpisywanych LaborHours atrybutów ze wszystkich <Location> elementy modelu produktu.Zgodnie ze schematem XML skojarzony z Instruction kolumna, LaborHours jest xs:decimal typu.
SELECT Instructions.query('
DECLARE namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
sum(data(//AWMI:Location/@LaborHours))
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7
Ta kwerenda zwraca 12.75 jako wynik.
Ostrzeżenie
Jawne użycie data() w tym przykładzie funkcja wyłącznie jako ilustracja.Jeśli nie zostanie określona, sum() niejawnie stosuje się data() funkcja wyodrębnić wartości wpisywanych węzłów.