Esporta (0) Stampa
Espandi tutto

Limitazioni del tipo di dati xml

SQL Server 2005

Le limitazioni seguenti si applicano al tipo di dati xml:

  • Non è utilizzabile come sottotipo di un'istanza sql_variant
  • Non supporta il cast o la conversione in text o ntext.
  • Non supporta i vincoli per le colonne e le tabelle seguenti:
    • PRIMARY KEY/ FOREIGN KEY
    • UNIQUE
    • COLLATE
      XML fornisce una codifica specifica. Le regole di confronto sono applicabili unicamente ai tipi string Il tipo di dati xml non è di tipo stringa. Fornisce tuttavia la rappresentazione di stringa e consente il cast a e da i tipi di dati string.
    • RULE
  • Non può essere confrontato o ordinato. Questo significa che un tipo di dati xml non può essere utilizzato in un'istruzione GROUP BY.
  • Non può essere utilizzato nelle viste partizionate distribuite.
  • Può essere creato in una vista materializzata. La vista materializzata non può essere basata su un metodo con tipo di dati XML. È tuttavia possibile eseguirne il cast su un insieme di schemi XML diverso dalla colonna di tipo xml nella tabella di base.
  • Non può essere utilizzato come parametro nelle funzioni scalari predefinite diverse da ISNULL, COALESCE e DATALENGTH.
  • Non può essere utilizzato come colonna chiave in un indice. Può tuttavia essere inserito come dati in un indice cluster o essere aggiunto in modo esplicito a un indice non cluster utilizzando la parola chiave INCLUDE durante la creazione dell'indice.
  • Le istruzioni di elaborazione della dichiarazione XML non vengono mantenute quando l'istanza viene archiviata nel database. Ad esempio:
    CREATE TABLE T1 (Col1 int primary key, Col2 xml)
    GO
    INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>')
    GO
    SELECT Col2
    FROM T1
    
    Il risultato è <doc/>.
    Le istruzioni di elaborazione della dichiarazione XML, ad esempio, <?xml version='1,0'?>, non vengono mantenute quando i dati XML vengono archiviati in un'istanza con tipo di dati xml. e ciò per motivi strutturali. La dichiarazione XML (<?xml ... ?>) e i suoi attributi (version/encoding/stand-alone) vengono persi dopo la conversione dei dati nel tipo xml. La dichiarazione XML viene considerata come una direttiva per il parser XML. I dati XML vengono archiviati internamente come ucs-2. Tutte le altre istruzioni di elaborazione dell'istanza XML vengono mantenute.
  • L'ordine degli attributi in un'istanza XML non viene mantenuto. Quando si esegue una query nell'istanza XML archiviata nella colonna di tipo xml, l'ordine degli attributi nel codice XML risultante può essere diverso rispetto all'istanza XML originale.
  • Per impostazione predefinita, gli spazi vuoti non significativi non vengono mantenuti. Ad esempio:
    DECLARE @x xml
    SET @x = '<root>      <child/>     </root>'
    SELECT @x 
    
    Di seguito è riportato il risultato:
    <root><child/></root>
    
    È tuttavia possibile modificare questo comportamento. Per mantenere lo spazio vuoto per un'istanza con tipo di dati xml, utilizzare l'operatore CONVERT e impostarne il parametro facoltativo style su 1. Ad esempio:
    SELECT CONVERT(xml, N'<root>      <child/>     </root>', 1)
    
    Se il parametro style non è utilizzato o il suo valore è impostato su 0, lo spazio vuoto non significativo non viene mantenuto nella conversione dell'istanza con tipo di dati xml. Per ulteriori informazioni su come utilizzare l'operatore CONVERT e il relativo parametro style quando si esegue la conversione di dati di tipo stringa in istanze con tipo di dati xml, vedere CAST e CONVERT (Transact-SQL).
  • Le virgolette singole e le virgolette doppie che racchiudono i valori di attributi non vengono mantenute. I valori degli attributi vengono archiviati nel database come una coppia di nome e valore, senza le virgolette. Quando viene eseguita una query XQuery su un'istanza XML, il codice XML risultante viene serializzato con i valori degli attributi racchiusi tra virgolette doppie.
    DECLARE @x xml
    -- Use double quotation marks.
    SET @x = '<root a="1" />'
    SELECT @x
    GO
    DECLARE @x xml
    -- Use single quotation marks.
    SET @x = '<root a=''1'' />'
    SELECT @x
    GO
    
    Entrambe le query restituiscono = <root a="1" />.
  • I prefissi degli spazi dei nomi non vengono mantenuti. Quando si specifica XQuery su una colonna di tipo xml, il codice XML serializzato risultante può restituire prefissi dello spazio dei nomi diversi.
    DECLARE @x xml
    SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
                <ns2:SomeElement/>
              </ns1:root>'
    SELECT @x
    SELECT @x.query('/*')
    GO
    
    È possibile che il prefisso dello spazio dei nomi nel risultato sia diverso. Ad esempio:
    <p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>
    
  • Se si copia e si incolla codice XML come un valore letterale stringa nella finestra dell'editor di query di SQL Server Management Studio, potrebbero verificarsi incompatibilità di codifica delle stringhe [N]VARCHAR, che dipendono dalla codifica dell'istanza XML utilizzata. In molti casi, è possibile rimuovere la dichiarazione XML. Ad esempio:
    <?xml version="1.0" encoding="UTF-8"?>
      <xsd:schema …
    
    È quindi consigliabile inserire una N per rendere l'istanza XML un'istanza di Unicode. Ad esempio:
    -- Assign XML instance to a variable.
    DECLARE @X XML
    SET @X = N'…'
    -- Insert XML instance into an xml type column.
    INSERT INTO T VALUES (N'…')
    -- Create an XML schema collection
    CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema … '
    
  • SQL Server restituisce al client istanze con tipo di dati xml come risultato di diversi costrutti server, quali query FOR XML che utilizzano la direttiva TYPE, o nel caso in cui il tipo di dati xml venga utilizzato per restituire codice XML da colonne SQL, variabili o parametri di output. Nel codice dell'applicazione client il provider ADO.NET richiede che queste informazioni con tipo di dati xml siano inviate dal server utilizzando una codifica binaria. Se tuttavia si utilizza FOR XML senza la direttiva TYPE, i dati XML vengono restituiti come tipo string. Il provider del client è in ogni caso in grado di gestire entrambi i formati del codice XML.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft