SQL:variable() işlevi (XQuery)
XQuery ifade içinde bir sql ilişkisel değer içeren değişken sergiler.
Sözdizimi
sql:variable("variableName") as xdt:anyAtomicType?
Açıklamalar
Konu altında açıklandığı gibi Bağlama ilişkisel veri içinde xml, kullandığınızda bu işlevi kullanabilirsiniz xml veri türü yöntemleri Ilişkisel değer içinde XQuery duyurmak için.
Örneğin, query() yöntemi depolanan xml örneği bir sorgu belirtmek için kullanılan bir xmlveri türü, değişken veya sütun. Bazen de sorgu değerleri kullanmak isteyebilirsiniz bir Transact-SQLdeğişkeni veya parametresi ilişkisel getirmek ve xml verilerini birlikte. Bunu yapmak için sql:variable işlevi.
sql değeri karşılık gelen bir XQuery değer eşlenen ve kendi türüne karşılık gelen sql türü eşdeğerdir XQuery temel tür olacaktır.
Sadece bakabilirsiniz bir xmlörnek bir xml dml kaynak ifade bağlamında INSERT deyimi; Aksi takdirde bu tür değerlere başvuruda bulunamaz xml veya bir ortak dil çalışma zamanı (clr) kullanıcı tanımlı türü.
Örnekler
A.XML'i bir Transact-sql değişken değeri getirmek için sql:variable() işlevini kullanma
Aşağıdaki örnek, aşağıdaki oluşan bir xml örneği oluşturur:
Değer (ProductID) olmayan xml sütundan. Sql:column() işlevi bu değer xml içinde bağlamak için kullanılır.
Değer (ListPrice) başka bir tablodan olmayan xml sütundan. Yine, sql:column()Bu değer xml içinde bağlamak için kullanılır.
Değer (DiscountPrice) gelen bir Transact-SQLdeğişkeni. sql:variable()Yöntem, XML'i bu değeri bağlamak için kullanılır.
Değer (ProductModelName) gelen bir xmltürü sütununda, sorguyu daha ilginç yapmak için.
Sorgu budur:
DECLARE @price money
SET @price=2500.00
SELECT ProductID, Production.ProductModel.ProductModelID,CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product
ProductID="{ sql:column("Production.Product.ProductID") }"
ProductModelID= "{ sql:column("Production.Product.ProductModelID") }"
ProductModelName="{/pd:ProductDescription[1]/@ProductModelName }"
ListPrice="{ sql:column("Production.Product.ListPrice") }"
DiscountPrice="{ sql:variable("@price") }"
/>')
FROM Production.Product
JOIN Production.ProductModel
ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID
WHERE ProductID=771
DECLARE @price money
SET @price=2500.00
SELECT ProductID, Production.ProductModel.ProductModelID,CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product
ProductID="{ sql:column("Production.Product.ProductID") }"
ProductModelID= "{ sql:column("Production.Product.ProductModelID") }"
ProductModelName="{/pd:ProductDescription[1]/@ProductModelName }"
ListPrice="{ sql:column("Production.Product.ListPrice") }"
DiscountPrice="{ sql:variable("@price") }"
/>')
FROM Production.Product
JOIN Production.ProductModel
ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID
WHERE ProductID=771
Önceki sorgudan aşağıdakilere dikkat edin:
XQuery içindeki query()yöntemi xml yapıları.
namespaceAnahtar kelime bir ad alanı önekini tanımlamak için kullanılan XQuery giriş. Bu çünkü yapılır ProductModelNameöznitelik değeri gelen alınır CatalogDescription xmltürü sütununda, bir şema görüneceği ile ilişkili olduğu
Sonuç şudur:
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
Ayrıca bkz.
Başvuru
SQL Server XQuery uzantısı işlevleri
Kavramlar
Yazılı xml yazılmamış xml karşılaştırın
DEL - Implementing XML in SQL Server
xml veri değişikliği dili (xml dml)