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

 

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

Εκτέλεση μεγάλου sql script με sqlcommand

Îåêßíçóå áðü ôï ìÝëïò Dimitris Papadimitriou. Τελευταία δημοσίευση από το μέλος KelMan στις 10-03-2007, 22:31. Υπάρχουν 17 απαντήσεις.
Σελίδα 1 από 2 (18 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-03-2007, 18:02 26217

    Εκτέλεση μεγάλου sql script με sqlcommand

    Έχω ένα αρκετά μεγάλο script να εκτελέσω. Θέλω να το εκτελέσω μέσω sqlclient.sqlcommand. Το script έχει δημιουργηθεί από τον script generator του sql server 2005 και δημιουργεί μια βάση δεδομένων. Όπως καταλαβαίνετε περιέχονται διάφορα CREATE TABLE που τελειώνουν με GO κλπ. Αν και το script είναι έγκυρο για το Managenent Studio, όταν εκτελείται από το sqlcommand εμφανίζονται exception του τύπου:

    Incorrect syntax near 'GO'.
    Incorrect syntax near 'GO'.
    Incorrect syntax near the keyword 'CREATE'.

    Ελπίζω να μην χρειαστεί να σπάσω σε κομμάτια το script μου! Θα ήθελα να είναι ένα αρχείο αντί για 100!

    Έχετε καμιά λύση!; 

     


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-03-2007, 18:09 26218 σε απάντηση της 26217

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Split ανα GO (σε table) και να το περνάς κομμάτι κομμάτι.

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  09-03-2007, 18:36 26219 σε απάντηση της 26218

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Το είχα πρόχειρο στον installer του project που δουλεύω:

        Private Function GetDatabaseInstallScript() As String()
            Dim statements As String = LoadManifestResource("DBInstaller.DBInstall.sql")
            statements = statements.Replace("GO", ";")

            Return statements.Split(";")
        End Function

    Και

                    sqlInstall = GetDatabaseInstallScript
                    conn = New SqlConnection(strConnection)
                    conn.Open()
                    Try
                        For Each sql As String In sqlInstall 
                            cmd = New SqlCommand(sql, conn)
                            cmd.ExecuteNonQuery()
                        Next
                    Catch ex As Exception
                        Throw
                    Finally
                        conn.Close()
                    End Try

    Οπότε το φέρνεις στα μέτρα σου και είσαι έτοιμος...


    Vir prudens non contra ventum mingit
  •  09-03-2007, 18:51 26220 σε απάντηση της 26219

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Και τι γίνεται αν έχεις ένα πίνακα που λέγεται π.χ. GOAL;

    Το script μου επίσης περιέχει και insert statements με κάποια δεδομένα. Και εκεί θα υπάρχει πρόβλημα αν κάποια δεδομένα περιέχουν ; ή GO σε κάποιο πεδίο varchar για παράδειγμα. 


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-03-2007, 18:54 26221 σε απάντηση της 26220

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Μπορείς να απομονώσεις το GO σαν ολόκληρη λέξη και εκτός quoted strings με ένα regular expression και να κάνεις έτσι το σπάσιμο.

    Νατάσα Μανουσοπούλου
  •  09-03-2007, 19:00 26222 σε απάντηση της 26220

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    "Αμάν, λες γι αυτό να παραπονιούνται ότι αποτυγχάνει συνεχώς το setup;"

    Big Smile χε χε χε... Εγώ δεν έχω πουθενά αλλού στο script ούτε ";" ούτε GO.

    Πάντως, ναι, το σωστότερο είναι αυτό που λέει η Νατάσα, να γίνει με regex. Προς το παρόν είναι στο TODO list...


    Vir prudens non contra ventum mingit
  •  09-03-2007, 19:36 26224 σε απάντηση της 26221

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Νατάσα Μανουσοπούλου:
    Μπορείς να απομονώσεις το GO σαν ολόκληρη λέξη και εκτός quoted strings με ένα regular expression και να κάνεις έτσι το σπάσιμο.

    Ναι... πόσα θέλεις για να γράψεις αυτό το regular expression; Embarrassed

    Για να δω αν μπορώ και μόνος... 


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-03-2007, 19:51 26225 σε απάντηση της 26224

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    string[] reg_lines = {""};

    RegEx myReg = new RegEx("^GO", RegExOptions.IgnoreCase | RegExOptions.Multiline);
    reg_lines = myReg.Split(sql_file_lines);

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  09-03-2007, 20:00 26226 σε απάντηση της 26225

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Panagiotis Kefalidis:
    string[] reg_lines = {""};

    RegEx myReg = new RegEx("^GO", RegExOptions.IgnoreCase | RegExOptions.Multiline);
    reg_lines = myReg.Split(sql_file_lines);

    Καλό κι αυτό. Αν και δουλεύει υπό προϋποθέσεις. Θα το χρησιμοποιήσω προς το παρόν με λίγο προσοχή.

    π.χ. δεν θα δουλέψει σωστά στα παρακάτω:

    CREATE TABLE

    GOAL .....

    ή σε αυτό

    INSERT INTO MYTABLE (MYCOLUMN) VALUES ('THIS IS THE

    GOAL')
     


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-03-2007, 20:06 26228 σε απάντηση της 26226

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Όχι, υποθέτω θα δουλέψει σωστά γιατί το string πρέπει να ξεκινάει απο GO κι οχι GOAL.
    Δηλαδή ΜΟΝΟ GΟ κι όχι Goal or GO'.

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  09-03-2007, 20:06 26229 σε απάντηση της 26225

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Panagiotis Kefalidis:
    string[] reg_lines = {""};

    RegEx myReg = new RegEx("^GO", RegExOptions.IgnoreCase | RegExOptions.Multiline);
    reg_lines = myReg.Split(sql_file_lines);

    ok. Λίγο καλύτερο είναι αυτό ^\bGO\b
     


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-03-2007, 20:09 26230 σε απάντηση της 26229

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Αχαχαχα, ετοιμαζόμουν να στο γράψω τώρα Stick out tongue

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  09-03-2007, 20:32 26231 σε απάντηση της 26230

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Για να κάνεις match το GO σαν ακέραια λέξη, χρησιμοποιείς καλύτερα το \WGO\W το οποίο απαιτεί να υπάρχουν γύρω από το GO non word characters. Αυτό πάλι δεν σε καλύπτει αν το GO είναι μέσα σε quoted string, για το οποίο μπορείς να κάνεις δύο πράγματα: είτε να φτιάξεις σωστά το regular expression, ή μετά το split να περάσεις τον πίνακα με τα επί μέρους statements ελέγχοντας μήπως κάποιο από αυτά έχει ημιτελές quoted string και αν ναι να το ενώνεις πάλι με το επόμενο, βάζοντας στη θέση του και το GO που έφαγες.

    Νατάσα Μανουσοπούλου
  •  09-03-2007, 20:49 26232 σε απάντηση της 26231

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Τελικά, καλά έκανα και το άφησα στο TODO list  Smile


    Vir prudens non contra ventum mingit
  •  10-03-2007, 11:54 26255 σε απάντηση της 26217

    Απ: Εκτέλεση μεγάλου sql script με sqlcommand

    Θα μπορούσες όπου έχεις GO να το αντικαταστήσεις μέ κάποιο delimited χαρακτήρα το πιό πιθανό  να είναι το ελληνικό ερωτηματικό ; και να κάνεις split με αυτόν χωρίς να χρειαστεί να μπλέξεις μέ  Regular Expressions.

     


    Ιωάννης Μανουσάκης
Σελίδα 1 από 2 (18 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems