Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Μετατροπή xml σε table in SQL Server 2000

Îåêßíçóå áðü ôï ìÝëïò Bill . Τελευταία δημοσίευση από το μέλος Bill στις 03-09-2009, 14:54. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  02-09-2009, 16:57 53396

    Μετατροπή xml σε table in SQL Server 2000

    Έχω ένα text πεδίο σε ένα πίνακα όπου σώζεται ένα xml .Έχω βρεί τρόπο να μετατρέψω το xml σε ένα rowset παίζοντας με την openxml. Όπως παρακάτω
    :
    DECLARE @idoc int
    DECLARE @doc varchar(8000)
    SELECT @doc = XML_text
     FROM table1
     WHERE
      table1.id = 2
    --Create an internal representation of the XML document.
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    -- Execute a SELECT statement that uses the OPENXML rowset provider.
    SELECT    *
             FROM  OPENXML (@idoc, '/analysis',1)
             WITH (propertie1  varchar(20),
                   propertie2 varchar(20),
                   propertie3 varchar(20),
                   propertie4 Varchar(20),
                   propertie5 varchar(20))
    EXEC sp_xml_removedocument @idoc

    Το παραπάνω μου επιστρέφει ένα rowset πολύ σωστά όπως θα το ήθελα. Αλλά σε περίπτωση που θέλω να γεμίσω με ένα insert select μαζικά έναν πίνακα και βγάζοντας το φίλτρο table1.id = 2 τότε έχω πολύ λογικά πρόβλημα δε με επιστρέφει τίποτα.Ξέρει κανείς τι θα ήταν καλύτερο να κάνω ?

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  02-09-2009, 18:30 53398 σε απάντηση της 53396

    Απ: Μετατροπή xml σε table in SQL Server 2000

    Μια λύση ίσως είναι να φτιάξεις μια table function που θα σου επιστρέφει τον τελικό πίνακα. Σ' ένα while loop μπορείς να κάνεις select όλα τα table1.id(s) που θέλεις και να κάνεις insert τα records στον πίνακα. Αν τα θέλεις όλα τότε μπορείς να γράψεις π.χ.:

    declare @idValues Table (ID Int)

    declare @currentID int

    Insert @idValues (ID) Select id From Table1

    Και το while loop γίνεται:

    While (select count(*) from @idValues>0)

       Begin

           Select Top 1 @currentID=ID From @idValues

          --   Κάνεις ό,τι είναι να κάνεις με το επιλεγμένο id (δηλαδή εισάγεις τα records στον πίνακα που επιστρέφει η function) και στο τέλος διαγράφεις το ID από τον πίνακα @idValues

          Delete From @idValues Where ID = @currentID

       End

    Νομίζω ότι κάτι τέτοιο θα δουλέψει.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  03-09-2009, 09:38 53433 σε απάντηση της 53398

    Απ: Μετατροπή xml σε table in SQL Server 2000

    table fucntion δεν μπορώ να κάνω γιατί δεν γίνεται μέσα σε udfs να εκτελέσω stored procedures όπως μπορείς να δείς στο πρώτο μου σχόλιο. Δε ξέρω και αν υπάρχει άλλος τρόπος να πάρω κάποιο element , attribute απο το xml  πάντα σε SQL 2000 γιατι σε SQL 2005 υπάρχει τρόπος.

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  03-09-2009, 12:22 53448 σε απάντηση της 53433

    Απ: Μετατροπή xml σε table in SQL Server 2000

    Δεν έχω δουλέψει με XML σε καμία έκδοση του SQL Server. Δεν καταλαβαίνω, όμως, γιατί δε μπορείς να βάλεις ένα Insert... Select statement μέσα στο While loop. Π.χ.:

    INSERT [Πίνακας] (Τα πεδία του πίνακα της table function)

    SELECT    *
             FROM  OPENXML (@idoc, '/analysis',1)
             WITH (propertie1  varchar(20),
                   propertie2 varchar(20),
                   propertie3 varchar(20),
                   propertie4 Varchar(20),
                   propertie5 varchar(20))

    κ.λπ....

    Κάθε φορά που εκτελείται μέσα στο loop το παραπάνω, θα σου γεμίζει τον πίνακα. Στο τέλος η function θα σου επιστρέψει όλες τις εγγραφές που θέλεις στον πίνακα που εσύ όρισες. Σίγουρα δεν παίζει έτσι;


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  03-09-2009, 13:40 53454 σε απάντηση της 53448

    Απ: Μετατροπή xml σε table in SQL Server 2000

      Ναι μέσα σε Function μπορείς να το βάλεις αυτό που λες. Αλλά πριν θα πρέπει να εκτελέσεις την stored procedure  sp_xml_preparedocument  κατι που δεν με βολεύει γιατι όλο θέλω να το έχω μέσα σε άλλα views / queries .

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  03-09-2009, 14:27 53455 σε απάντηση της 53454

    Απ: Μετατροπή xml σε table in SQL Server 2000

    Το αρχικό σου post δεν υποδηλώνει κάτι τέτοιο. Απλά ζητάς έναν τρόπο να πάρεις όλα τα data που έχεις με μορφή xml. Καλό θα ήταν να περιγράψεις τη ροή των εργασιών που θέλεις να κάνεις γιατί, τουλάχιστον εγώ, δεν την έχω καταλάβει. Από την άλλη πάλι, αν ψάχνεις για μια λύση που θα έχει εφαρμογή σε όλες τις περιπτώσεις, για αυθαίρετα joins και για την κατασκευή οποιουδήποτε view που μπορείς να γράψεις τώρα ή στο μέλλον, ίσως θα πρέπει να φτιάξεις έναν δεύτερο πίνακα στον οποίο θ' αποθηκεύονται σε tabular μορφή τα δεδομένα που έχεις τώρα σε xml. Αυτή η λύση προϋποθέτει ότι θα φτιάξεις stored procedures για τα inserts, deletes και updates, του αρχικού πίνακα οι οποίες θα ενημερώνουν για τις μεταβολές και τον παράγωγο πίνακα  (όλα σε transactions ώστε να πετυχαίνουν οι αλλαγές και στους δύο). Αυτόν τον δεύτερο πίνακα μπορείς να τον χρησιμοποιήσεις όπως θέλεις στα views. Just a thought...
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  03-09-2009, 14:54 53456 σε απάντηση της 53455

    Απ: Μετατροπή xml σε table in SQL Server 2000

    Τελικά έκανα stored procedures όπως πολύ σωστά αναφέρεις στο τελευταίο σχόλιο.Δυστηχώς πιο απλό τρόπο δεν έχω βρεί. Thanks ,...Big Smile

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems