How do I run large SQL scripts that contain many keywords, including “GO” using C#?

前端 未结 3 1062
心在旅途
心在旅途 2020-12-21 14:04

I\'m creating a web application that serves as a front end to do SQL Replication.

I have many scripts stored in the properties of the program. Let\'s use the first o

相关标签:
3条回答
  • 2020-12-21 14:23

    Change your ConstructCreatePublicationScript to return a List<string> where each string element is a piece of your complete script splitted at the GO statement. This is necessary because the GO is the separator used by Management Studio and not a SQL statement

    public static List<string> ConstructCreatePublicationScript(string rawPublicationScript, string rawAddArticleScript)
    {
        .....
    
        List<string> result = new List<string>();
        result.AddRange(Regex.Split(createPublicationScript, "^GO$", RegexOptions.Multiline));
        return result;
    }
    

    then change your execution code to receive the list and execute each single string

    public static void CreatePublication(string server, List<string> queries)    
    {    
        string finalConnString = Properties.Settings.Default.rawConnectionString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", "tempdb");    
    
         using (SqlConnection conn = new SqlConnection(finalConnString))    
         {    
             conn.Open();    
             foreach(string query in queries)
             {
                 using (SqlCommand cmd = new SqlCommand(query, conn))    
                 {    
                     cmd.ExecuteNonQuery();    
                 }
             }    
          }    
    }
    
    0 讨论(0)
  • 2020-12-21 14:25

    The GO command is not an SQL command, it's a command in SQL Management Studio. It separates batches in a script.

    To run the script as SQL, split it on "GO" and execute each string by itself.

    (You might want to use a regular expression like \bGO\b or \sGO\s to do the split, so that you catch only occurances that is not part of a word, if you would happen to have an identifier that contains "go".)

    0 讨论(0)
  • 2020-12-21 14:28

    read the file. when you come across "GO" submit the query to server (without "GO" itself) and then go on reading.

    0 讨论(0)
提交回复
热议问题