通常在进行SQL Server数据库操作时都依赖于SQL Server Management Studio(SSMS)或其他SQL客户端。对于程序而言,某些场景下,必须要使用SSMS原生的API进行DDL操作,而又无法直接操作SSMS GUI程序时,可以按照如下方法进行操作。
场景:
需要将某一个数据库中的所有对象(表、视图、存储过程、函数等)的定义导出。
分析:
如果没有特殊情况的话,大多数对象都可以采用jdbc获取对象名称,而后采用使用JDBC完成表结构/存储过程复制 这篇文章中所介绍的GetDDL存储过程来获取其定义,但在需要考虑创建顺序的情况下,遍历对象而后获取定义进行执行之前,还需要通过代码分析出各个对象之间的依赖,以确定执行的先后顺序,很显然过于繁琐。好在Microsoft已经提前考虑到了这个问题,在SSMS中进行Script As操作时,会自动分析其依赖,并按照一定顺序形成完整的SQL脚本,因此,通过SSMS导出的脚本可以直接执行,无需考虑执行的先后顺序。但程序无法直接调用SSMS GUI程序,因此,需要通过一个命令行的工具来执行。
微软提供了一个叫mssql-scripter的工具来帮助执行这个导出操作,程序已经在github上开源:https:///microsoft/mssql-scripter
这个工具是依赖python的,因此,需要在目标服务器上安装最新的python程序,并将python加入环境变量。而后,通过下述命令进行安装:
C:\Windows\system32>pip install mssql-scripter --proxy=proxyhk.aac.com:8011
Collecting mssql-scripter
Downloading mssql_scripter-1.0.0a23-py2.py3-none-win32.whl (36.3 MB)
|████████████████████████████████| 36.3 MB 123 kB/s
Collecting future>=0.16.0
Downloading future-0.18.2.tar.gz (829 kB)
|████████████████████████████████| 829 kB 3.3 MB/s
Collecting wheel>=0.29.0
Downloading wheel-0.35.1-py2.py3-none-any.whl (33 kB)
Collecting enum34>=1.1.6
Downloading enum34-1.1.10-py3-none-any.whl (11 kB)
Using legacy setup.py install for future, since package 'wheel' is not installed.
Installing collected packages: future, wheel, enum34, mssql-scripter
Running setup.py install for future ... done
Successfully installed enum34-1.1.10 future-0.18.2 mssql-scripter-1.0.0a23 wheel-0.35.1安装完成后,就可以通过如下指令进行数据库结构导出:
>mssql-scripter --server localhost --database 'SFCTEST' --user 'sa' --password 'sdadhasd' --file-path D:\1.sqlserver指定了服务器的地址,database指定了数据库名称,user指定了用户名,password指定了对应的密码,--file-path指定了导出的目标文件的路径
执行后,稍等片刻,就可以在上述目录下找到导出的脚本:

















