• 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 一下哦

  • 相关阅读:
    Oracle函数-DECODE
    WPF模板
    WPF数据编辑的提交与撤销
    WPF数据验证
    WPF多源绑定
    WPF筛选、排序和分组
    WPF绑定到集合
    输出的数据格式是如何决定的-------Asp.net WebAPI学习笔记(二)
    路由其实也可以很简单-------Asp.net WebAPI学习笔记(一)
    终结篇:RemoteWebDriver与Grid简介-----Selenium快速入门(十五)
  • 原文地址:https://www.cnblogs.com/junejs/p/12686998.html
Copyright © 2020-2023  润新知