none
Sql 2005 - campi XML RRS feed

  • Domanda

  • Buongiorno a tutti,

    ho una tabella AR con gli attributi cd_ar ed un campo XML di nome NoteXML.

    Eseguo il ""cross Apply" fra la tabella AR ed AR.NoteXML.nodes per poi decodificare il risultato con .values.

    La cosa che non riesco a capire è il motivo per il quale il values mi restituisce tutti i risultati (corretti) ma se il risultato della riga corrente è uguale a quello della riga precedente viene sostituito con NULL!

    La stessa query eseguita su SQL 2008 funziona correttamente, temo dipenda da un settaggio di una particolare impostazione.

    Nel caso non mi sia spiegato bene, questo può aiutare a capire: http://img219.imageshack.us/i/query.jpg/

    Grazie a tutti in anticipo.

     

    mercoledì 23 febbraio 2011 09:38

Tutte le risposte

  • Eseguo il ""cross Apply" fra la tabella AR ed AR.NoteXML.nodes per poi decodificare il risultato con .values.


     

    Ciao,

    Per quale motivo esegui una CROSS APPLY quando puoi evitare? 

    USE tempdb;
    
    CREATE TABLE dbo.Ar(
    Cd_AR char(8) NOT NULL,
    NoteXML xml NOT NULL
    );
    
    INSERT dbo.Ar
    VALUES ('CATEFLO0', '<rows><row nota="9">GEKO FLOR</row></rows>')
      , ('CATEFLO1', '<rows><row nota="9">GEKO FLOR</row></rows>')
      , ('CATEFLO3', '<rows><row nota="9">GEKO FLOR</row></rows>');
      
    SELECT
     Cd_AR
     , NoteXML.value('(/rows/row/@nota)[1]', 'int') AS nota
     , NoteXML.value('(/rows/row)[1]', 'varchar(10)') AS valore
    FROM dbo.Ar;
    
    /* Output:
    
    Cd_AR nota  valore
    -------- ----------- ----------
    CATEFLO0 9   GEKO FLOR
    CATEFLO1 9   GEKO FLOR
    CATEFLO3 9   GEKO FLOR
    
    (3 row(s) affected)
    
    */
    
    DROP TABLE dbo.Ar;
    
    Ciao!
    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    mercoledì 23 febbraio 2011 21:34
    Moderatore