Associazione di dati relazionali all'interno di dati XML
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
È possibile specificare metodi con tipo di dati xml per una variabile o colonna con tipo di dati xml. Ad esempio, il metodo query() (tipo di dati xml) esegue la query XQuery specificata in un'istanza XML. Quando si creano dati XML in questo modo, è possibile inserirvi un valore di una colonna di tipo non XML o di una variabile Transact-SQL. Questo processo viene definito associazione di dati relazionali all'interno di dati XML.
Nel Motore di database di SQL Server sono disponibili le pseudofunzioni seguenti che consentono di associare dati relazionali non XML all'interno di dati XML:
Funzione sql:column() (XQuery) Consente di usare i valori di una colonna relazionale nell'espressione XQuery o XML DML.
Funzione sql:variable() (XQuery) . Consente di utilizzare il valore di una variabile SQL nell'espressione XQuery o XML DML.
È possibile usare queste funzioni con i metodi con tipo di dati xml quando si vuole esporre un valore relazionale all'interno di dati XML.
Non è possibile usare queste funzioni per fare riferimento a dati di colonne o variabili di tipo xml, CLR definito dall'utente, datetime, smalldatetime, text, ntext, sql_variant e image.
Inoltre, questo tipo di associazione è destinata a scopi di sola lettura, ovvero non è possibile scrivere dati nelle colonne che utilizzano queste funzioni. Ad esempio, sql:variable("@x")="some expression" non è consentita.
Esempio: query tra domini tramite sql:variable()
Questo esempio illustra come sql:variable() può consentire a un'applicazione di impostare i parametri di una query. Il codice ISBN viene passato usando una variabile SQL @isbn. Sostituendo la costante con sql:variable() è possibile usare la query per cercare qualsiasi codice ISBN, non solo gli elementi con codice ISBN uguale a 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() ha un uso analogo e offre vantaggi aggiuntivi. Per migliorare l'efficienza è possibile utilizzare indici sulla colonna, in base a quanto stabilito dallo strumento Query Optimizer basato sui costi. Nella colonna calcolata può inoltre essere archiviata una proprietà promossa.