Udostępnij za pośrednictwem


SQL:kolumna() funkcja (XQuery)

Zgodnie z opisem w temacie, wiązanie danych relacyjnej wewnątrz XML, można użyć SQL:kolumna(() funkcja, gdy używasz Metody typu danych XML narazić relacyjnej wartość wewnątrz XQuery.

Na przykład Metoda Query() (typ danych XML) Pozwala określić kwerendy przed wystąpienie XML, który jest przechowywany w zmiennej lub kolumna XML typu.Czasami konieczne może być również kwerendy do wartości z innego, należy użyć XML inny niż kolumna, do relacyjnych i dane XML razem.Aby to zrobić, należy użyć SQL:kolumna() funkcja.

Wartość SQL będą mapowane do odpowiedniej wartości XQuery i będzie jego typ podstawowy typ XQuery, na który jest odpowiednikiem odpowiedniego typu programu SQL.

sql:column("columnName")

Remarks

Należy zauważyć, że odwołanie do kolumna określonej w SQL:kolumna() funkcja wewnątrz XQuery odwołuje się do kolumna, w wierszu, który jest teraz przetwarzana.

W SQL Server, tylko może odnosić się do XML wystąpienie w kontekście wyrażenie źródłowe XML DML wstawiać instrukcja; w przeciwnym razie nie można odwołać się do kolumny, które są typu XML lub zdefiniowany przez użytkownika typ danych CLR.

The sql:kolumna() funkcja is not supported in łączyć operations.Zamiast tego można użyć operacji Zastosuj.

Przykłady

A.Za pomocą sql:kolumna() pobrać relacyjnej wartości wewnątrz XML

Przy tworzeniu XML, następujący przykład ilustruje pobrania wartości z kolumna relacyjnej XML inny niż powiązać XML i relacyjnymi bazami danych.

Kwerendy konstrukcji XML, który ma następującą postać:

<Product ProductID="771" ProductName="Mountain-100 Silver, 38" ProductPrice="3399.99" ProductModelID="19" 
  ProductModelName="Mountain 100" />

Należy uwzględnić następujące metody w skonstruowany kod XML:

  • The ProductID, ProductName,and ProductPrice attribute values are obtained from the Product table.

  • The ProductModelID atrybut value is retrieved from the ProductModel tabela.

  • Dokonywanie bardziej interesujące kwerendy ProductModelName uzyskano na podstawie wartość atrybutCatalogDescription kolumna Typ danych XML.Ponieważ informacje wykazu modelu produktu XML nie są przechowywane dla wszystkich modeli produktu if Instrukcja jest używany do pobierania wartości tylko wtedy, gdy istnieje.

    SELECT P.ProductID, CatalogDescription.query('
    declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
           <Product 
               ProductID=       "{ sql:column("P.ProductID") }"
               ProductName=     "{ sql:column("P.Name") }"
               ProductPrice=    "{ sql:column("P.ListPrice") }"
               ProductModelID= "{ sql:column("PM.ProductModelID") }" >
               { if (not(empty(/pd:ProductDescription))) then
                 attribute ProductModelName { /pd:ProductDescription[1]/@ProductModelName }
                else 
                   ()
    }
            </Product>
    ') as Result
    FROM Production.ProductModel PM, Production.Product P
    WHERE PM.ProductModelID = P.ProductModelID
    AND   CatalogDescription is not NULL
    ORDER By PM.ProductModelID
    

Pierwszy przycisk jest przyciskiem domyślnym.

  • Ponieważ są one pobierane z dwóch różnych tabel, klauzula FROM określa dwie tabele.Warunku w klauzula WHERE filtruje wyniki i pobiera tylko produkty, których modeli produktów zawiera opisy wykazu.

  • The namespace keyword in the XQuery Prolog defines the XML namespace prefix, "pd", that is used in the query body.Należy zauważyć, że aliasy tabela, "" P"i"PM", są określone w klauzula FROM samą kwerendę.

  • The sql:kolumna() funkcja is used to bring non-XML values inside XML.

Jest to wynik częściowy:

ProductID               Result
-----------------------------------------------------------------
771         <Product ProductID="771"                   ProductName="Mountain-100 Silver, 38" 
                  ProductPrice="3399.99" ProductModelID="19" 
                  ProductModelName="Mountain 100" />
...

Poniższa kwerenda tworzy XML, który zawiera informacje dotyczące produktu.Informacje te obejmują IDProduktu, NazwaProduktu, ProductPrice i, jeśli jest dostępny, ProductModelName dla wszystkich produktów, które należą do określonego modelu produktu, ProductModelID = 19.Kod XML jest następnie przypisywany do zmiennej @ x XML typu.

declare @x xml
SELECT @x = CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
       <Product 
           ProductID=       "{ sql:column("P.ProductID") }"
           ProductName=     "{ sql:column("P.Name") }"
           ProductPrice=    "{ sql:column("P.ListPrice") }"
           ProductModelID= "{ sql:column("PM.ProductModelID") }" >
           { if (not(empty(/pd:ProductDescription))) then
             attribute ProductModelName { /pd:ProductDescription[1]/@ProductModelName }
            else 
               ()
}
        </Product>
') 
FROM Production.ProductModel PM, Production.Product P
WHERE PM.ProductModelID = P.ProductModelID
And P.ProductModelID = 19
select @x