Udostępnij za pośrednictwem


Query() metoda (xml typ danych)

Określa XQuery przeciwko wystąpienie xml typu danych.Wynik jest xml typu.metoda zwraca wystąpienie XML bez typu.

Składnia

query ('XQuery')

Argumenty

  • XQuery
    Jest ciąg , XQuery wyrażenie, że kwerendy dla węzłów XML, takie jak elementy i atrybuty XML wystąpienie.

Przykłady

W tej sekcji podano przykłady przy użyciu metoda query() z xml typu danych.

A.Za pomocą metoda query() wobec zmiennej typu xml

Poniższy przykład deklaruje zmienną @ "mójdok" z xml wpisz i przypisuje do niego XML wystąpienie .**Query()**metoda jest następnie używana do określania XQuery przeciwko dokumentu.

Kwerenda pobiera <Features> elementupodrzędność elementu <ProductDescription> element:

declare @myDoc xml
set @myDoc = '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>'
SELECT @myDoc.query('/Root/ProductDescription/Features')

Jest to wynikiem:

<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>      

B.Przy użyciu metoda query() przeciwko typ XML kolumna

W poniższym przykładzie query() metoda jest używana do określenia XQuery przeciwko CatalogDescription kolumna xml należy wpisać w AdventureWorks2008R2 bazy danych:

SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />
') as Result
FROM Production.ProductModel
where CatalogDescription.exist('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";
     /PD:ProductDescription/PD:Features/wm:Warranty ') = 1

Poniższe z poprzedniej kwerendy:

  • CatalogDescription kolumna jest wpisany xml kolumna .Oznacza to, że ma schematu kolekcja z nią skojarzone.W XQuery prologu, obszaru nazw słowo kluczowe jest używany do definiowania prefiks, który jest później wykorzystywany w treści kwerendy.

  • Query() metoda konstrukcji XML, <Product> elementu, który ma ProductModelID atrybut, w którym ProductModelIDwartośćatrybut jest pobierane z bazy danych. Aby uzyskać więcej informacji na temat konstrukcji XML, zobacz Budowa XML (XQuery).

  • Exist() metoda (typ danych XML) w klauzula WHERE jest używane do wyszukiwania tylko tych wierszy, które zawiera <Warranty> element XML.Ponownie obszaru nazw słowo kluczowe jest używane do definiowania dwóch prefiksy obszarów nazw.

Jest częściowo wynikiem:

<Product ProductModelID="19"/> 
<Product ProductModelID="23"/> 
...

Należy zauważyć, że metody query() i exist() oświadczają, prefiksu PD.W takich przypadkach można użyć Z XMLNAMESPACES najpierw zdefiniować prefiksy i użyć w kwerendzie.

WITH XMLNAMESPACES (
   'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD,
   'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />
') as Result
FROM Production.ProductModel
where CatalogDescription.exist('
     /PD:ProductDescription/PD:Features/wm:Warranty ') = 1