Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Ujawnia zmienną zawierającą wartość relacyjną SQL wewnątrz wyrażenia XQuery.
Syntax
sql:variable("variableName") as xdt:anyAtomicType?
Remarks
Jak opisano w temacie Binding Relational Data Inside XML, możesz użyć tej funkcji, gdy używasz metod typów danych XML do udostępniania wartości relacyjnej w XQuery.
Na przykład metoda query() służy do określenia zapytania względem instancji XML przechowywanej w zmiennej lub kolumnie typu danych xml . Czasami możesz też chcieć, aby zapytanie używało wartości z zmiennej Transact-SQL lub parametru, aby połączyć dane relacyjne i XML. Aby to zrobić, używasz funkcji sql:variable .
Wartość SQL zostanie zamapowana na odpowiadającą wartość XQuery, a jej typ będzie typem podstawowym XQuery, który jest odpowiednikiem odpowiedniego typu SQL.
Do instancji xml można odwołać się tylko w kontekście wyrażenia źródłowego instrukcji XML-DML insert; w przeciwnym razie nie można odwoływać się do wartości typu XML lub typów zdefiniowanych przez użytkownika w języku Common Language (CLR).
Examples
A. Wykorzystanie funkcji sql:variable() do przeniesienia wartości Transact-SQL zmiennej do XML
Poniższy przykład konstruuje instancję XML składającą się z następujących elementów:
Wartość (
ProductID) z kolumny nie-XML. Funkcja sql:column() służy do powiązania tej wartości w XML.Wartość (
ListPrice) z kolumny nie-XML z innej tabeli. Ponownie,sql:column()jest używany do wiązania tej wartości w XML.Wartość (
DiscountPrice) z zmiennej Transact-SQL. Metoda tasql:variable()służy do powiązania tej wartości z plikiem XML.Wartość (
ProductModelName) z kolumny typu xml , aby uczynić zapytanie ciekawszym.
Jest to zapytanie:
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
Zwróć uwagę na następujące elementy z poprzedniego zapytania:
XQuery wewnątrz
query()metody konstruuje XML.Słowo
namespacekluczowe służy do definiowania prefiksu przestrzeni nazw w Prologu XQuery. Dzieje się tak, ponieważ wartość atrybutuProductModelNamejest pobierana z kolumnyCatalogDescription xmltypu, która ma przypisany schemat.
Jest to wynik:
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />