MS SQLServer 數據庫導出工具


上下文


最近的一個項目,使用的數據庫是 MS SQLServer,每次要發布新版本時,需要把開發環境的庫(我們稱為template庫)生成腳本(表結構+基礎數據),此腳本會被放到發布包中,以便在產生環境利用這個腳本生成數據庫。
可以通過SQLServer的管理工具(Microsoft SQL Server Management Studio)生成腳本,如下:

然后就是一步一步的設置,最終生成腳本,比較繁瑣,且每次重復這樣的過程很是浪費時間。再有,我打算以后在持續集成中自動生成腳本並打包,微軟沒有提供這樣的命令行工具。
所以,我就利用 smo 相關的庫自己寫一個小工具,來實現數據庫導出功能。

功能


  • 可以導出數據庫結構(schema)腳本
  • 可以導出數據(data)腳本
  • 可以選擇 schema 和 data 在同一個腳本文件中,或者兩個單獨的腳本文件

下載地址:https://pan.baidu.com/s/1mjUFqOC
解壓后,可以看到 mssql-dump-ui.exemssql-dump-console.exe,下面分別介紹這兩個工具:

mssql-dump-ui.exe


雙擊此exe,會彈出如下界面:

填寫好數據庫連接參數后,即可點擊 Dump 按鈕導出腳本,之后選擇一個文件夾,作為腳本的輸出目錄,腳本的名稱規則如下:

  • 如果沒有勾選 seperate schema and data, 則最終的腳本名稱為 [DbName].sql,比如 test.sql
  • 如果勾選了 seperate schema and data,則最終的腳本名稱為: [DbName]–schema.sql, [DbName]–data.sql. 比如 test-schema.sql, test-data.sql

腳本導出完成后,會自動打開輸出目錄。

mssql-tool-console.exe


命令行工具,在 cmd shell 中可以查看該命令行的幫助信息:
image.png

示例:
mssql-dump-console -s .\sqlexpress -u sa -p password1 -i test -d -o d:/test_script
等同於:
mssql-dump-console --server=.\sqlexpress --userid=sa --password=password1 --dbname=test --include-data --output-dir=d:/test_script

核心代碼


public void GenerateSchema(DbInfo dbInfo, TextWriter textWriter)
        {
            var serverConn = new ServerConnection(dbInfo.Server, dbInfo.UserId, dbInfo.Password);
            Server srv = new Server(serverConn);
            Database db = srv.Databases[dbInfo.DbName];
            if (db == null)
            {
                throw new Exception($"Database {dbInfo.DbName} not exists.");
            }

            Scripter scripter = new Scripter(srv);

            scripter.Options.NoCollation = true;
            scripter.Options.Indexes = true;
            scripter.Options.ClusteredIndexes = true;
            scripter.Options.NonClusteredIndexes = true;
            scripter.Options.DriAll = true;
            scripter.Options.DriAllConstraints = true;

            scripter.Options.Triggers = true;
            scripter.Options.FullTextIndexes = true;

            scripter.Options.AllowSystemObjects = false;
            scripter.Options.WithDependencies = false;

            scripter.Options.TargetDatabaseEngineEdition = DatabaseEngineEdition.Standard;
            scripter.Options.TargetDatabaseEngineType = DatabaseEngineType.Standalone;

            scripter.Options.ExtendedProperties = true;

            scripter.Options.ScriptDrops = false;
            scripter.Options.ScriptSchema = true;
            scripter.Options.ScriptData = false;

            textWriter.WriteLine("-----------------------------------------");
            textWriter.WriteLine("-----------------schema------------------");
            textWriter.WriteLine("-----------------------------------------");
            foreach (Urn table in getTableUrnWithDependence(db))
            {
                System.Collections.Specialized.StringCollection sc = scripter.Script(new Urn[] { table });
                foreach (string st in sc)
                {
                    Console.WriteLine(st);
                    textWriter.WriteLine(st);
                    textWriter.WriteLine("GO");
                }
            }
        }

源碼


源碼:https://github.com/junejs/mssql-dump.git
如果這個工具幫到了你,記得在 github star 一下哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM