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
Jak je popsáno v tématu Vazba relačních dat uvnitř XML, můžete použít funkci sql:column(() při použití metod datových typů XML k zveřejnění relační hodnoty uvnitř XQuery.
Například metoda query() (datový typ XML) slouží k zadání dotazu na instanci XML, která je uložena v proměnné nebo sloupci typu XML . Někdy můžete chtít, aby dotaz používal hodnoty z jiného sloupce, který není XML, k propojení relačních dat a dat XML. K tomu použijete funkci sql:column().
Hodnota SQL se namapuje na odpovídající hodnotu XQuery a jeho typ bude základní typ XQuery, který odpovídá odpovídajícímu typu SQL.
Syntaxe
sql:column("columnName")
Poznámky
Všimněte si, že odkaz na sloupec zadaný ve funkci sql:column() uvnitř XQuery odkazuje na sloupec v řádku, který se zpracovává.
V SQL Serveru můžete odkazovat pouze na instanci XML v kontextu zdrojového výrazu příkazu XML-DML insert; v opačném případě nelze odkazovat na sloupce, které jsou typu XML nebo CLR uživatelem definovaný typ.
Funkce sql:column() není v operacích JOIN podporovaná. Místo toho je možné použít operaci APPLY.
Examples
A. Použití sql:column() k načtení relační hodnoty uvnitř XML
Při vytváření XML ukazuje následující příklad, jak můžete načíst hodnoty z relačního sloupce mimo XML pro vazbu XML a relačních dat.
Dotaz vytvoří XML, který má následující formulář:
<Product ProductID="771" ProductName="Mountain-100 Silver, 38" ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
Všimněte si následující položky v vytvořeném xml:
Hodnoty atributů ProductID, ProductName a ProductPrice jsou získány z tabulky Product .
Hodnota atributu ProductModelID se načte z tabulky ProductModel .
Aby byl dotaz zajímavější, hodnota atributu ProductModelName se získá ze sloupce CatalogDescriptiontypu XML. Protože informace katalogu modelů produktů XML nejsou uloženy pro všechny modely produktu, příkaz se používá k načtení hodnoty pouze v případě,
ifže existuje.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
Všimněte si následujících věcí z předchozího dotazu:
Vzhledem k tomu, že hodnoty se načítají ze dvou různých tabulek, klauzule FROM určuje dvě tabulky. Podmínka v klauzuli WHERE vyfiltruje výsledek a načte pouze produkty, jejichž modely produktů mají popisy katalogu.
Klíčové slovo oboru názvů v XQuery Prolog definuje předponu oboru názvů XML ,pd", která se používá v textu dotazu. Všimněte si, že aliasy tabulky P a PM jsou definovány v klauzuli FROM samotného dotazu.
Funkce sql:column() slouží k přenesení hodnot mimo XML do XML.
Toto je částečný výsledek:
ProductID Result
-----------------------------------------------------------------
771 <Product ProductID="771" ProductName="Mountain-100 Silver, 38"
ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
...
Následující dotaz vytvoří XML, který obsahuje informace specifické pro produkt. Tyto informace zahrnují ID produktu, ProductName, ProductPrice a pokud je k dispozici, productModelName pro všechny produkty, které patří do konkrétního modelu produktu, ProductModelID=19. Xml se pak přiřadí proměnné @x typu XML .
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
Viz také
Porovnání typed XML to Untyped XML
XML Data (SQL Server)
Vytvoření instancí dat XML
Xml – metody datového typu
XML Data Modification Language (XML DML)