Condividi tramite


Associazione di dati relazionali all'interno di dati XML

È possibile specificare i Metodi con tipo di dati XML per una variabile o una colonna con tipo di dati xml. Il Metodo query() con tipo di dati XML esegue ad esempio la query XQuery specificata in un'istanza di 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:

È possibile utilizzare queste funzioni con i metodi con tipo di dati xml quando si desidera esporre un valore relazionale all'interno di dati XML.

Non è possibile utilizzare 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()

In questo esempio viene illustrato in che modo sql:variable() può consentire a un'applicazione di parametrizzare una query. Il codice ISBN viene passato utilizzando una variabile SQL @isbn. Sostituendo la costante con sql:variable(), è possibile utilizzare 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 utilizzo 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à innalzata di livello.

Vedere anche

Concetti

Altre risorse