ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sqlServer2008升级2016raiserror语法修改工具

2020-06-27 09:08:14  阅读:301  来源: 互联网

标签:Trim ToList string text 语法 2016raiserror && sqlServer2008 line


  private void btnUpdate_Click(object sender, EventArgs e)
        {
            List<string> listFileName = Directory.GetFiles(@AppConfig.FilePath).ToList();
            StringBuilder text = new StringBuilder();
            bool twoLine = false;
            //StringBuilder strBox = new StringBuilder();
            listFileName.ForEach(f =>
            {
                File.Delete(@"D:\temp2\" + Path.GetFileName(f));
                StreamWriter sw = new StreamWriter(@"D:\temp2\" + Path.GetFileName(f), true, Encoding.UTF8);                
                using (FileStream fs = new FileStream(f, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
                    {
                        Regex regex = new Regex(@"^[0-9]{1,7}$");
                        while (sr.Peek() > -1)
                        {
                            string line = sr.ReadLine();
                            if (twoLine)
                            {
                                text.Append(line.Replace('\'', '"').Split('"').ToList()[0] + "',16,1)");
                                sw.WriteLine(text);
                                text.Clear();
                                twoLine = false;
                                continue;
                            }
                            if ((line.IndexOf("raiserror", StringComparison.CurrentCultureIgnoreCase) != -1) &&
                               (!line.Trim().StartsWith("/*")) && (!line.Trim().EndsWith("*/")) && (!line.Trim().StartsWith("--"))
                               && (!line.Contains("@")) && (!line.Trim().EndsWith("\"")) && (!line.Trim().EndsWith("'"))
                               && (!line.Trim().EndsWith(";")) && (!line.Trim().EndsWith(")"))
                               && (!(line.Split('\'').ToList().Where(x => !string.IsNullOrEmpty(x.Trim())).Last().ToUpper().Contains("RETURN")))
                               && (!(line.Split('\'').ToList().Where(x => !string.IsNullOrEmpty(x.Trim())).Last().ToUpper().Contains("END"))))
                            {  //RAISERROR 99999 'The record has already been changed by another person,please reload
                               // the program and edit it again.'
                                List<string> listRaise = new List<string>();
                                listRaise = Regex.Replace(line, "raiserror", "^", RegexOptions.IgnoreCase).Split('^').ToList();
                                listRaise.ForEach(x =>
                                {
                                    if (!string.IsNullOrEmpty(x.Trim()))
                                    {
                                        List<string> listSub = new List<string>();
                                        listSub = x.Trim().Split('\'').ToList();
                                        if (x.Contains("\"")) //RAISERROR 99999 "This Record Already Exists In This Table."
                                            listSub = x.Trim().Split('"').ToList();
                                        //Regex regex2 = new Regex(@"(\([^\)]*.*\))");                                       
                                        if (regex.IsMatch(listSub[0].Trim()))
                                        {
                                            text.Append(string.Format(" RAISERROR ('{0}", listSub[1].ToString()));
                                        }
                                    }
                                });
                                twoLine = true;
                                continue;
                            }
                            //create PROCEDURE[dbo].[GenerateDatacollectionByHour_sp_test]
                            //(line.ToUpper().Contains("PROCEDURE") || line.ToUpper().Contains("PROC")) &&

 

                            if (!string.IsNullOrEmpty(line.Trim()) && (line.ToUpper().Replace("\t", " ").Split(' ').ToList().Where(s => !string.IsNullOrEmpty(s.Trim())).ToList()[0].Equals("CREATE"))
                            && (line.ToUpper().Replace("PROCEDURE", "PROC").Contains("PROC")))
                            {
                                if ((!line.Trim().StartsWith("/*")) && (!line.Trim().EndsWith("*/")) && (!line.Trim().StartsWith("--")))
                                { // CREAT PROCEDURE[DBO].[CREATEWOBYMANU]  --Created by Yang for Repair Check Function at TJ 2015-12-18 Begin
                                  //CREATE PROCEDURE [dbo].[ where SERIAL_NUMBER='7CE552P4CM']存储名带空格  
                                    text.Append(string.Format("ALTER PROCEDURE [{0}[{1}",
                                                line.Split('[').ToList().ToList()[1],
                                                line.Split('[').ToList().ToList()[2]));
                                    sw.WriteLine(text);
                                    text.Clear();
                                    continue;
                                }
                            }
                            //以end或return结尾的  考虑变量里含有return关键字//RAISERROR 99999 @_strReturnMsg 
                            if ((line.IndexOf("raiserror", StringComparison.CurrentCultureIgnoreCase) != -1) &&
                               (!line.Trim().StartsWith("/*")) && (!line.Trim().EndsWith("*/")) && (!line.Trim().StartsWith("--"))
                               && (line.ToUpper().Trim().EndsWith("END")
                               || regex.IsMatch( line.ToUpper().Trim().Split(' ').ToList().Last())))
                            {
                                //RAISERROR 99996 @retmsg end  //RAISERROR 99996 @retmsg return 101
                                if (line.Contains("@"))
                                {                                   
                                    text.Append(string.Format(" RAISERROR (@{0},16,1) {1}",
                                        line.Split('@')[1].Split(' ').ToList().Where(x=>!string.IsNullOrEmpty(x.Trim())).First(),
                                        line.Split('@')[1].Remove(0, line.Split('@')[1].Split(' ').ToList().Where(x => !string.IsNullOrEmpty(x.Trim())).First().Length)));
                                    sw.WriteLine(text);
                                    text.Clear();
                                    continue;
                                }
                                else  //RAISERROR 99999 'Transaction type can not be NULL.'  RETURN 100  
                                      //99999 'Transaction type can not be NULL.'   end 
                                {
                                    text.Append(string.Format(" RAISERROR ('{0}',16,1) {1}", line.Split('\'').ToList()[1], line.Split('\'').ToList().Last().Replace(";", "")));
                                    sw.WriteLine(text);
                                    text.Clear();
                                    continue;
                                }
                            }
                            if ((line.IndexOf("raiserror", StringComparison.CurrentCultureIgnoreCase) != -1) &&
                            (!line.Trim().StartsWith("/*")) && (!line.Trim().EndsWith("*/")) && (!line.Trim().StartsWith("--")))
                            {
                                List<string> listRaise = new List<string>();
                                listRaise = Regex.Replace(line, "raiserror", "^", RegexOptions.IgnoreCase).Split('^').ToList().Where(s => !string.IsNullOrEmpty(s.Trim())).ToList();
                                if ( listRaise.Count == 1)
                                {
                                    string x = listRaise[0].Trim();
                                    if (x.ToArray().ToList().Where(s => !string.IsNullOrEmpty(s.ToString().Trim())).ToList()[0].ToString().Equals("("))
                                    { //RAISERROR(@strError,16,1)  //raiserror(15009, -1, -1, @objname, @dbname)
                                      //raiserror(15197, -1, -1, @objname)  //raiserror(15471, -1, -1)
                                      //RAISERROR(@strRror, 16, 1)

 

                                         //RAISERROR  (@ErrorMessage,  
                                         //  @ErrorSeverity,  
                                         //  @ErrorState 
                                         //  ); 
                                        text.Append(string.Format("RAISERROR{0}", x));
                                        sw.WriteLine(text);
                                        text.Clear();
                                        continue;
                                    }
                                    List<string> listSub = new List<string>();
                                    listSub = x.Trim().Split('\'').ToList().Where(s => !string.IsNullOrEmpty(s.Trim())).ToList();
                                    if (x.ToArray().ToList().Where(s => !string.IsNullOrEmpty(s.ToString().Trim())).ToList().Where(s => s.Equals('"')).Count() == 2)
                                    { // 99999 "This Record Already Exists In This Table."
                                      // 99999 'ERROR: Must save An Fail Analy!!!"'
                                        listSub = x.Trim().Split('"').ToList().Where(s => !string.IsNullOrEmpty(s.Trim())).ToList();
                                    }
                                    if (regex.IsMatch(listSub[0].Trim()))
                                    {
                                        text.Append(string.Format(" RAISERROR ('{0}',16,1)", listSub[1].ToString()));
                                        sw.WriteLine(text);
                                        text.Clear();
                                        continue;
                                    }
                                    if (listSub[0].Contains("@"))
                                    {  //   99999 @strRror   //RAISERROR 99999 @_strReturnMsg (变量含有return关键字)
                                        // raiserror 99999 @res_msg;
                                        text.Append(string.Format(" RAISERROR (@{0},16,1)", 
                                            (listSub[0].Split('@').ToList())[1].ToString().Replace(";","")));
                                        sw.WriteLine(text);
                                        text.Clear();
                                        continue;
                                    }                                   
                                }
                                else
                                {
                                    sw.WriteLine(line);                                    
                                }
                            }
                            else
                            {
                                sw.WriteLine(line);
                            }
                        }
                    }
                }
                sw.Close();
            });
            MessageBox.Show("修改成功");
        }

 

 

 

 private void btnUpdate_Click(object sender, EventArgs e)
        {
            List<string> listFileName = Directory.GetFiles(@AppConfig.FilePath).ToList();
            StringBuilder text = new StringBuilder();
            bool twoLine = false;
            //StringBuilder strBox = new StringBuilder();
            listFileName.ForEach(f =>
            {
                File.Delete(@"D:\temp2\" + Path.GetFileName(f));
                StreamWriter sw = new StreamWriter(@"D:\temp2\" + Path.GetFileName(f), true, Encoding.UTF8);                
                using (FileStream fs = new FileStream(f, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
                    {
                        Regex regex = new Regex(@"^[0-9]{1,7}$");
                        while (sr.Peek() > -1)
                        {
                            string line = sr.ReadLine();
                            if (twoLine)
                            {
                                text.Append(line.Replace('\'', '"').Split('"').ToList()[0] + "',16,1)");
                                sw.WriteLine(text);
                                text.Clear();
                                twoLine = false;
                                continue;
                            }
                            if ((line.IndexOf("raiserror", StringComparison.CurrentCultureIgnoreCase) != -1) &&
                               (!line.Trim().StartsWith("/*")) && (!line.Trim().EndsWith("*/")) && (!line.Trim().StartsWith("--"))
                               && (!line.Contains("@")) && (!line.Trim().EndsWith("\"")) && (!line.Trim().EndsWith("'"))
                               && (!line.Trim().EndsWith(";")) && (!line.Trim().EndsWith(")"))
                               && (!(line.Split('\'').ToList().Where(x => !string.IsNullOrEmpty(x.Trim())).Last().ToUpper().Contains("RETURN")))
                               && (!(line.Split('\'').ToList().Where(x => !string.IsNullOrEmpty(x.Trim())).Last().ToUpper().Contains("END"))))
                            {  //RAISERROR 99999 'The record has already been changed by another person,please reload
                               // the program and edit it again.'
                                List<string> listRaise = new List<string>();
                                listRaise = Regex.Replace(line, "raiserror", "^", RegexOptions.IgnoreCase).Split('^').ToList();
                                listRaise.ForEach(x =>
                                {
                                    if (!string.IsNullOrEmpty(x.Trim()))
                                    {
                                        List<string> listSub = new List<string>();
                                        listSub = x.Trim().Split('\'').ToList();
                                        if (x.Contains("\"")) //RAISERROR 99999 "This Record Already Exists In This Table."
                                            listSub = x.Trim().Split('"').ToList();
                                        //Regex regex2 = new Regex(@"(\([^\)]*.*\))");                                       
                                        if (regex.IsMatch(listSub[0].Trim()))
                                        {
                                            text.Append(string.Format(" RAISERROR ('{0}", listSub[1].ToString()));
                                        }
                                    }
                                });
                                twoLine = true;
                                continue;
                            }
                            //create PROCEDURE[dbo].[GenerateDatacollectionByHour_sp_test]
                            //(line.ToUpper().Contains("PROCEDURE") || line.ToUpper().Contains("PROC")) &&

 

                            if (!string.IsNullOrEmpty(line.Trim()) && (line.ToUpper().Replace("\t", " ").Split(' ').ToList().Where(s => !string.IsNullOrEmpty(s.Trim())).ToList()[0].Equals("CREATE"))
                            && (line.ToUpper().Replace("PROCEDURE", "PROC").Contains("PROC")))
                            {
                                if ((!line.Trim().StartsWith("/*")) && (!line.Trim().EndsWith("*/")) && (!line.Trim().StartsWith("--")))
                                { // CREAT PROCEDURE[DBO].[CREATEWOBYMANU]  --Created by Yang for Repair Check Function at TJ 2015-12-18 Begin
                                  //CREATE PROCEDURE [dbo].[ where SERIAL_NUMBER='7CE552P4CM']存储名带空格  
                                    text.Append(string.Format("ALTER PROCEDURE [{0}[{1}",
                                                line.Split('[').ToList().ToList()[1],
                                                line.Split('[').ToList().ToList()[2]));
                                    sw.WriteLine(text);
                                    text.Clear();
                                    continue;
                                }
                            }
                            //以end或return结尾的  考虑变量里含有return关键字//RAISERROR 99999 @_strReturnMsg 
                            if ((line.IndexOf("raiserror", StringComparison.CurrentCultureIgnoreCase) != -1) &&
                               (!line.Trim().StartsWith("/*")) && (!line.Trim().EndsWith("*/")) && (!line.Trim().StartsWith("--"))
                               && (line.ToUpper().Trim().EndsWith("END")
                               || regex.IsMatch( line.ToUpper().Trim().Split(' ').ToList().Last())))
                            {
                                //RAISERROR 99996 @retmsg end  //RAISERROR 99996 @retmsg return 101
                                if (line.Contains("@"))
                                {                                   
                                    text.Append(string.Format(" RAISERROR (@{0},16,1) {1}",
                                        line.Split('@')[1].Split(' ').ToList().Where(x=>!string.IsNullOrEmpty(x.Trim())).First(),
                                        line.Split('@')[1].Remove(0, line.Split('@')[1].Split(' ').ToList().Where(x => !string.IsNullOrEmpty(x.Trim())).First().Length)));
                                    sw.WriteLine(text);
                                    text.Clear();
                                    continue;
                                }
                                else  //RAISERROR 99999 'Transaction type can not be NULL.'  RETURN 100  
                                      //99999 'Transaction type can not be NULL.'   end 
                                {
                                    text.Append(string.Format(" RAISERROR ('{0}',16,1) {1}", line.Split('\'').ToList()[1], line.Split('\'').ToList().Last().Replace(";", "")));
                                    sw.WriteLine(text);
                                    text.Clear();
                                    continue;
                                }
                            }
                            if ((line.IndexOf("raiserror", StringComparison.CurrentCultureIgnoreCase) != -1) &&
                            (!line.Trim().StartsWith("/*")) && (!line.Trim().EndsWith("*/")) && (!line.Trim().StartsWith("--")))
                            {
                                List<string> listRaise = new List<string>();
                                listRaise = Regex.Replace(line, "raiserror", "^", RegexOptions.IgnoreCase).Split('^').ToList().Where(s => !string.IsNullOrEmpty(s.Trim())).ToList();
                                if ( listRaise.Count == 1)
                                {
                                    string x = listRaise[0].Trim();
                                    if (x.ToArray().ToList().Where(s => !string.IsNullOrEmpty(s.ToString().Trim())).ToList()[0].ToString().Equals("("))
                                    { //RAISERROR(@strError,16,1)  //raiserror(15009, -1, -1, @objname, @dbname)
                                      //raiserror(15197, -1, -1, @objname)  //raiserror(15471, -1, -1)
                                      //RAISERROR(@strRror, 16, 1)

 

                                         //RAISERROR  (@ErrorMessage,  
                                         //  @ErrorSeverity,  
                                         //  @ErrorState 
                                         //  ); 
                                        text.Append(string.Format("RAISERROR{0}", x));
                                        sw.WriteLine(text);
                                        text.Clear();
                                        continue;
                                    }
                                    List<string> listSub = new List<string>();
                                    listSub = x.Trim().Split('\'').ToList().Where(s => !string.IsNullOrEmpty(s.Trim())).ToList();
                                    if (x.ToArray().ToList().Where(s => !string.IsNullOrEmpty(s.ToString().Trim())).ToList().Where(s => s.Equals('"')).Count() == 2)
                                    { // 99999 "This Record Already Exists In This Table."
                                      // 99999 'ERROR: Must save An Fail Analy!!!"'
                                        listSub = x.Trim().Split('"').ToList().Where(s => !string.IsNullOrEmpty(s.Trim())).ToList();
                                    }
                                    if (regex.IsMatch(listSub[0].Trim()))
                                    {
                                        text.Append(string.Format(" RAISERROR ('{0}',16,1)", listSub[1].ToString()));
                                        sw.WriteLine(text);
                                        text.Clear();
                                        continue;
                                    }
                                    if (listSub[0].Contains("@"))
                                    {  //   99999 @strRror   //RAISERROR 99999 @_strReturnMsg (变量含有return关键字)
                                        // raiserror 99999 @res_msg;
                                        text.Append(string.Format(" RAISERROR (@{0},16,1)", 
                                            (listSub[0].Split('@').ToList())[1].ToString().Replace(";","")));
                                        sw.WriteLine(text);
                                        text.Clear();
                                        continue;
                                    }                                   
                                }
                                else
                                {
                                    sw.WriteLine(line);                                    
                                }
                            }
                            else
                            {
                                sw.WriteLine(line);
                            }
                        }
                    }
                }
                sw.Close();
            });
            MessageBox.Show("修改成功");
        }

标签:Trim,ToList,string,text,语法,2016raiserror,&&,sqlServer2008,line
来源: https://www.cnblogs.com/wangjp-1233/p/13197284.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有