導出SQL腳本小程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.IO;

namespace ExportSQL
{
    class Tsest
    {
        static void Main(string[] args)
        {
            string connstr = @"Data Source = .; User ID = sa; Password = 123456; Initial Catalog = Test; Connection Reset = FALSE; Pooling = true; Max Pool Size = 500";
            ExportSQL(connstr, "v", "v_StoreWithArea, uspGetCustRenewHist");
        }

        /// <summary>
        /// 導出sql腳本
        /// </summary>
        /// <param name="connStr">數據庫連接字符串</param>
        /// <param name="sqlType">需要導出的腳本的類型,可以爲null或""</param>
        /// <param name="nameStr">腳本的名稱(列入存儲過程的名稱、視圖的名稱等)可以爲null或""param>
        static void ExportSQL(string connStr, string sqlType, string nameStr)
        {
            List<SqlParameter> sqlParameters = new List<SqlParameter>();
            StringBuilder str = new StringBuilder("SELECT o.name,s.text FROM sysobjects o inner join   syscomments s on o.id = s.id ");
            if (!string.IsNullOrEmpty(sqlType))
            {
                sqlParameters.Add(new SqlParameter("@sqlType", sqlType));
                str.Append(" AND o.xtype =@sqlType ");
            }
            if (!string.IsNullOrEmpty(nameStr))
            {
                var whereArray = nameStr.Split(',');
                str.Append(" and o.name  in ( ");
                for (int i = 0; i < whereArray.Length; i++)
                {
                    sqlParameters.Add(new SqlParameter("@name" + i, whereArray[i].Trim()));
                    str.Append("@name" + i);
                    if (i < whereArray.Length - 1)
                    {
                        str.Append(",");
                    }
                }
                str.Append(" )");
            }

            string _sqltype = "";
            switch (sqlType.Trim().ToUpper())
            {
                case "P":
                    _sqltype = "proc";
                    break;
                case "V":
                    _sqltype = "view";
                    break;
                case "TF":
                    _sqltype = "funtion";
                    break;
                case "TR":
                    _sqltype = "trigger";
                    break;
                case "U":
                    _sqltype = "table";
                    break;
                default:
                    _sqltype = "proc";
                    break;
            }
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand sqlCommand = new SqlCommand(str.ToString(), conn))
                {
                    if (sqlParameters != null && sqlParameters.Count != 0)
                    {
                        sqlCommand.Parameters.AddRange(sqlParameters.ToArray());
                    }
                    SqlDataReader reader = sqlCommand.ExecuteReader();
                    string fileName = "sql腳本" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
                    string filePath = "C:\\項目\\" + fileName;     //文件路徑
                    //創建文件流   FileMode.OpenOrCreate  有就打開,沒有就創建
                    FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate);
                    fs.Close();
                    StreamWriter write = new StreamWriter(filePath,false);//覆蓋現有內容
                    while (reader.Read())
                    {
                        string name = reader["name"].ToString();

                        write.WriteLine("--------------------" + name + "開始---------------");
                        write.WriteLine("");
                        write.WriteLine(@"if exists(select * from sys.objects  where name='{0}'  and type='{1}')", name, sqlType);
                        write.WriteLine("begin");
                        write.WriteLine(@"  drop {0} {1}", _sqltype, name);
                        write.WriteLine("end");
                        write.WriteLine("go");
                        write.WriteLine("");
                        write.WriteLine(reader["text"]);
                        write.WriteLine("--------------------" + name + "結束---------------");
                        write.WriteLine("");
                    }
                    Console.WriteLine("導出sql成功");
                    write.Close();
                    reader.Close();
                    Console.ReadLine();
                }
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章