Binda relationsdata inom XML-data

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Du kan specificera xml Data Type Methods mot en xml-datatypvariabel eller kolumn. Till exempel exekverar query()-metoden (xml Data Type) den specificerade XQuery mot en XML-instans. När du konstruerar XML på detta sätt kan du vilja ta in ett värde från en kolumn av icke-XML-typ eller en Transact-SQL variabel. Denna process kallas att binda relationsdata inom XML.

För att binda den icke-XML-relationella datan inom XML tillhandahåller SQL Server Database Engine följande pseudofunktioner:

Du kan använda dessa funktioner med xml-datatypmetoder när du vill exponera ett relationsvärde i XML.

Du kan inte använda dessa funktioner för att referera data i kolumner eller variabler av xml, CLR-användardefinierade typer, datetime, smalldatetime, text, ntext, sql_variant och bildtyper .

Dessutom är denna bindning avsedd för skrivskydd. Det vill säga, du kan inte skriva data i kolumner som använder dessa funktioner. Till exempel är sql:variable("@x")="något uttryck" inte tillåtet.

Exempel: Cross-domain Query med sql:variable()

Detta exempel visar hur sql:variable() kan göra det möjligt för en applikation att parametrisera en fråga. ISBN:et skickas in med hjälp av en SQL-variabel @isbn. Genom att ersätta konstanten med sql:variable() kan frågan användas för att söka efter vilket ISBN som helst och inte bara det vars ISBN är 0-7356-1588-2.

DECLARE @isbn VARCHAR(20)  
SET     @isbn = '0-7356-1588-2'  
SELECT  xCol  
FROM    T  
WHERE   xCol.exist ('/book/@ISBN[. = sql:variable("@isbn")]') = 1  

sql:column() kan användas på liknande sätt och ger ytterligare fördelar. Index över kolumnen kan användas för effektivitet, vilket bestäms av den kostnadsbaserade frågeoptimeraren. Dessutom kan den beräknade kolumnen lagra en promoverad egenskap.

Se även