Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
A témakörben leírtak szerint relációs adatok kötése XML-belül, az sql:column() függvényt akkor használhatja, ha XML-adattípus-metódusokat használva relációs értéket tesz elérhetővé az XQueryben.
A query() metódus (XML-adattípus) például egy olyan XML-példány lekérdezésének megadására szolgál, amely xml- típusú változóban vagy oszlopban van tárolva. Előfordulhat, hogy azt is szeretné, hogy a lekérdezés egy másik, nem XML-oszlop értékeit használja a relációs és XML-adatok összehozásához. Ehhez az sql:column() függvényt kell használnia.
Az SQL-érték megfeleltethető egy megfelelő XQuery-értékhez, és a típusa egy XQuery alaptípus lesz, amely egyenértékű a megfelelő SQL-típussal.
Szintaxis
sql:column("columnName")
Megjegyzések
Vegye figyelembe, hogy a sql:column() függvényben megadott oszlopra való hivatkozás az XQueryben a feldolgozandó sor egyik oszlopára utal.
Az SQL Serverben csak egy xml--példányra hivatkozhat egy XML-DML beszúrási utasítás forráskifejezésének kontextusában; ellenkező esetben nem hivatkozhat xml- vagy felhasználó által definiált CLR típusú oszlopokra.
Az sql:column() függvény nem támogatott a JOIN műveletekben. Ehelyett az APPLY művelet használható.
Példák
Egy. Sql:column() használata a relációs érték XML-ben való lekéréséhez
Az XML létrehozásakor az alábbi példa bemutatja, hogyan kérdezhet le értékeket egy nem XML-relációs oszlopból az XML- és relációs adatok kötéséhez.
A lekérdezés az alábbi formátumú XML-t hozza létre:
<Product ProductID="771" ProductName="Mountain-100 Silver, 38" ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
Jegyezze fel a következőket a létrehozott XML-ben:
A ProductID, ProductNameés ProductPrice attribútumértékek a Termék táblából származnak.
A ProductModelID attribútum értéke lekéri a ProductModel táblából.
A lekérdezés érdekesebbé tétele érdekében a ProductModelName attribútum értéke a CatalogDescriptionxml típusúoszlopából származik. Mivel az XML-termékmodell katalógusadatai nem az összes termékmodellhez tárolódnak, a
ifutasítás csak akkor kéri le az értéket, ha létezik.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
Jegyezze fel az előző lekérdezésben szereplő következőket:
Mivel az értékek két különböző táblából származnak, a FROM záradék két táblát határoz meg. A WHERE záradékban szereplő feltétel szűri az eredményt, és csak azokat a termékeket kéri le, amelyek termékmodelljei katalógusleírásokkal rendelkeznek.
Az XQuery Prolog névtér kulcsszó határozza meg a lekérdezés törzsében használt XML-névtér-előtagot, a "pd"-t. Vegye figyelembe, hogy a "P" és a "PM" tábla aliasok a lekérdezés FROM záradékában vannak definiálva.
Az sql:column() függvény nem XML-értékek XML-ben való elhelyezésére szolgál.
Ez a részleges eredmény:
ProductID Result
-----------------------------------------------------------------
771 <Product ProductID="771" ProductName="Mountain-100 Silver, 38"
ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
...
Az alábbi lekérdezés termékspecifikus információkat tartalmazó XML-t hoz létre. Ezek az információk tartalmazzák a ProductID azonosítót, a ProductName-t, a ProductPrice-t, és ha elérhető, a ProductModelName-t minden olyan termékhez, amely egy adott termékmodellhez (ProductModelID=19) tartozik. Az XML ezután hozzá lesz rendelve xml típusú @x változóhoz.
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
Lásd még:
SQL Server XQuery Extension Functions
Gépelt XML összehasonlítása a nem beírt XML-
XML-adatok (SQL Server)
XML-adatpéldányok létrehozása
xml-adattípus-metódusok
XML-adatmódosítási nyelv (XML DML)