标题:一行导出所有任意的微软SQL server数据脚本——基于Python的微软官方mssql-scripter工具使用全解释关键词: mssql-scripter,SQL Server文章分类3360技术分享。
创建于2020年3月30日, _。-'\ _.-'\,-'\ \ \中联博CMS\ \ \ web开发技巧\ \ \ z01.com _。-;\ \ _.-': \ \,-'_.-'\ (_.-' `- ' MSSQL-scripter有哪些特殊的应用场景?怎么安装?首先安装pythonb)安装mssql-scripter,在命令行执行以下命令:安装在Linux中。a)检查pip版本,是否为9.0或以上版本:b)如果没有安装pip或版本低于9.0,使用以下命令安装并升级版本:c)安装MSSQL-Scripter: Mac OS(没有实际环境,只有官方文档)a)检查pip是否为9.0或以上版本:b)如果没有安装pip或版本低于9.0, 使用以下命令安装和升级版本:使用经典导出完整库显示进度导出脚本显示进度而不使用数据库,不包括ZL _节点表,其他完整生成显示进度而不使用数据库,仅生成ZL _节点表以显示进度而不使用数据库,生成ZL _节点和ZL _用户表以显示进度而不使用数据库,以及生成ZL _节点。 ZL _用户,ZL_CommonModel三表,包括删除旧表,建立新表,插入数据脚本,一些有用的参数用作变量,使用微软团队的官方说明(英文)使用指南描述选项示例转储数据库对象模式转储数据库对象数据转储数据库对象模式和数据包含数据库对象包含数据库对象目标服务器版本目标服务器编辑管道生成脚本sedScript数据到文件环境变量本文是中国第一个专注于高端web和全栈开发并提供全领域生态环境的中联重科CMS团队首发,www.z01.com,官网
什么是MSSQL-scripter?
微软官方发布的一款数据库管理工具,可以通过命令行直接生成SQL脚本。
在实际开发中,如果想提高数据库生成的效率,使用它可以事半功倍。
如果你对语言比较熟悉,当然也可以使用微软平台上的sqlcms、dotNETcore、Powershell工具快速建模各种数据库,而这个工具提供了另一种跨平台的可能性。
我们来看看官方的介绍:
我们很高兴推出mssql-scripter,这是一种用于编写SQL Server数据库脚本的多平台命令行体验。
Mssql-scripter是一个多平台命令行,相当于在SSMS广泛使用的“生成脚本向导”的体验。您可以在Linux、macOS和Windows上使用mssql-scripter为SQL Server、Azure SQL数据库和Azure SQL数据仓库中运行的数据库对象生成数据定义语言(DDL)和数据操作语言(DML)T-SQL脚本。您可以将生成的T-sql脚本保存到一个. sql文件中,或者通过管道将其传输到一个标准的nix实用程序(如sed、awk、grep)中,以便进行进一步的转换。您可以编辑生成的脚本或将其签入源代码控制,然后使用标准的多平台SQL命令行工具(如sqlcmd)在现有的SQL数据库部署流程和DevOps管道中执行脚本。
Mssql-scripter是用Python构建的,并结合了新的Az。
ure CLI 2.0工具的可用性原则。官方Github库:https://github.com/microsoft/mssql-scripter
截止本文写作时,版本号:1.0.0a23
有何特色它是跨平台的它是基于python的(虽然python最近炒得很热,其实微软的powershell和.netcore也有很多超凡之处,只是微软为python提供了一种操作可能,展现了巨硬团队在跨平台方面的实力。它更精简它能集成在环境变量。应用场景除了普通开发的、部署外,还可以用于CI/CD持续部署,亦即自动化部署。
如何安装首先是安装python安装Python,最新安装包下载地址:https://www.python.org/downloads/,注意安装的时候要选择”Add Python to PATH”选项:
安装有一些选项,用默认就可以了,以下为相关选项说明:
nstall for all users 所有用户可使用Associate files with Python 关联PY相关的文件Create shortcuts for installed applications 创建桌面的快捷方式Add Python to environment variables 添加系统变量(windows系统)Precompile standard library 安装预编译标准库Download debugging symbols 安装调试模块(开发者可选择,运用于开发环境)Download debug binaries安装用于VS的调试符号(二进制),如果不使用VS作为开发工具,则不用勾选(支持VS2015以上),适用于.NET开发。
b) 安装mssql-scripter,命令行里执行下面命令:pip install mssql-scripter在Linux安装a) 检查pip版本,是否是9.0及其以上:pip –versionb) 如果pip未安装或者版本低于9.0,使用如下命令安装以及升级版本:sudo apt-get install python-pipsudo pip install --upgrade pipc) 安装mssql-scripter:sudo pip install mssql-scripter如果系统是Ubuntu或者Debian,需要安装libunwind8软件包:
Ubuntu 14 & 17执行如下命令:
sudo apt-get updatesudo apt-get install libunwind8Debian 8(无实测环境,仅官方文档)文件‘/etc/apt/sources.list’需要更新:
deb http://ftp.us.debian.org/debian/ jessie main执行如下命令:
sudo apt-get updatesudo apt-get install libunwind8macOS(无实测环境,仅官方文档)a) 检查pip版本,是否是9.0及其以上:pip –versionb) 如果pip未安装或者版本低于9.0,使用如下命令安装以及升级版本:sudo apt-get install python-pipsudo pip install --upgrade pipc) 安装mssql-scripter:
sudo pip install mssql-scripter使用示例经典的导出全库# 微软官方示例mssql-scripter -S localhost -d AdventureWorks -U sa --schema-and-data > ./adventureworks.sql# 实际用例mssql-scripter -S 192.168.1.4 -d ZoomlaCMS -U ZoomlaDB_user -P 数据库密码 --schema-and-data --display-progress > ./adventureworks3.sql显示进度导出脚本mssql-scripter -S 192.168.1.4 -d ZoomlaCMS -U ZoomlaDB_user -P 数据库密码 --schema-and-data --exclude-use-database --display-progress > ./adventureworks3.sql显示进度不带use数据库,排除ZL_Node表,其它全生成mssql-scripter -S 192.168.1.4 -d ZoomlaCMS -U ZoomlaDB_user -P 数据库密码 --schema-and-data --exclude-objects ZL_Node --exclude-use-database --display-progress > ./adventureworks4.sql显示进度不带use数据库,仅生成ZL_Node表mssql-scripter -S 192.168.1.4 -d ZoomlaCMS -U ZoomlaDB_user -P 数据库密码 --schema-and-data --include-objects ZL_Node --exclude-use-database --display-progress > ./adventureworksA.sql显示进度不带use数据库,生成ZL_Node,ZL_User两张表mssql-scripter -S 192.168.1.4 -d ZoomlaCMS -U ZoomlaDB_user -P 数据库密码 --schema-and-data --include-objects ZL_Node ZL_User --exclude-use-database --display-progress > ./adventureworksB.sql显示进度不带use数据库,生成ZL_Node,ZL_User,ZL_CommonModel三张表,包含删除旧表建新以及插入数据脚本mssql-scripter -S 192.168.1.4 -d ZoomlaCMS -U ZoomlaDB_user -P 数据库密码 --schema-and-data --include-objects ZL_Node ZL_User ZL_CommonModel --exclude-use-database --script-drop-create --display-progress > ./adventureworksB.sql一些有用的参数--file-per-object默认情况下,脚本是单个文件。如果提供并且给--file-path目录,每个脚本该目录的对象。--data-only默认情况下,仅对架构进行脚本编写。如果提供,生成仅包含数据的脚本。--schema-and-data默认情况下,仅对模式进行脚本编写。如果提供,生成包含架构和数据的脚本。--script-create脚本对象CREATE语句。--script-drop脚本对象DROP语句。--script-drop-create脚本对象CREATE和DROP语句。 -exclude-use-database不生成USE DATABASE语句。 --data-compressions编写数据压缩信息脚本。 --display-progress显示脚本编制进度作为变量使用喜欢极简的你,一定嫌写数据库名和密码这些太复杂,没问题,微软爸爸想到了,你还可以将这些作为变量写到系统中。
可以把连接字符串设置成环境变量:
# set environment variable MSSQL_SCRIPTER_CONNECTION_STRING with a connection string.export MSSQL_SCRIPTER_CONNECTION_STRING='Server=myserver;Database=mydb;User Id=myuser;Password=mypassword;'mssql-scripter # set environment variable MSSQL_SCRIPTER_PASSWORD so no password input is required.export MSSQL_SCRIPTER_PASSWORD='ABC123'mssql-scripter -S localhost -d AdventureWorks -U sa微软团队官方使用说明(英文)Usage GuideContents:
Options
Examples
Environment Variables
Descriptionmssql-scripter is the multiplatform command line equivalent of the widely used Generate Scripts Wizard experience in SSMS.
You can use mssql-scripter on Linux, macOS, and Windows to generate data definition language (DDL) and data manipulation language (DML) T-SQL scripts for database objects in SQL Server running anywhere, Azure SQL Database, and Azure SQL Data Warehouse. You can save the generated T-SQL script to a .sql file or pipe it to standard *nix utilities (for example, sed, awk, grep) for further transformations. You can edit the generated script or check it into source control and subsequently execute the script in your existing SQL database deployment processes and DevOps pipelines with standard multiplatform SQL command line tools such as sqlcmd.
OptionsFor option parameters, pass in ‘-h’:
$ mssql-scripter -husage: mssql-scripter <-h> <--connection-string | -S > <-d> <-U> <-P> <-f> <--file-per-object> <--data-only | --schema-and-data> <--script-create | --script-drop | --script-drop-create> <--target-server-version {2005,2008,2008R2,2012,2014,2016,vNext,AzureDB,AzureDW}> <--target-server-edition {Standard,Personal,Express,Enterprise,Stretch}> <--include-objects <<...>>> <--exclude-objects <<...>>> <--include-schemas <<...>>> <--exclude-schemas <<...>>> <--include-types <<...>>> <--exclude-types <<...>>> <--ansi-padding> <--append> <--check-for-existence> <-r> <--convert-uddts> <--include-dependencies> <--exclude-headers> <--constraint-names> <--unsupported-statements> <--disable-schema-qualification> <--bindings> <--collation> <--exclude-defaults> <--exclude-extended-properties> <--logins> <--object-permissions> <--owner> <--exclude-use-database> <--statistics> <--change-tracking> <--exclude-check-constraints> <--data-compressions> <--exclude-foreign-keys> <--exclude-full-text-indexes> <--exclude-indexes> <--exclude-primary-keys> <--exclude-triggers> <--exclude-unique-keys> <--display-progress> <--enable-toolsservice-logging> <--version> Microsoft SQL Server Scripter Command Line Tool. Version 1.0.0a14 optional arguments: -h, --help show this help message and exit --connection-string Connection string of database to script. If connection string and server are not supplied, defaults to value in environment variable MSSQL_SCRIPTER_CONNECTION_STRING. -S , --server Server name. -d , --database Database name. -U , --user Login ID for server. -P , --password If not supplied, defaults to value in environment variable MSSQL_SCRIPTER_PASSWORD. -f , --file-path File to script out to or directory name if scripting file per object. --file-per-object By default script to a single file. If supplied and given a directory for --file-path, script a file per object to that directory. --data-only By default only the schema is scripted. if supplied, generate scripts that contains data only. --schema-and-data By default only the schema is scripted. if supplied, generate scripts that contain schema and data. --script-create Script object CREATE statements. --script-drop Script object DROP statements. --script-drop-create Script object CREATE and DROP statements. --target-server-version {2005,2008,2008R2,2012,2014,2016,vNext,AzureDB,AzureDW} Script only features compatible with the specified SQL Version. --target-server-edition {Standard,Personal,Express,Enterprise,Stretch} Script only features compatible with the specified SQL Server database edition. --include-objects < < ...>> Database objects to include in script. --exclude-objects < < ...>> Database objects to exclude from script. --include-schemas < < ...>> Database objects of this schema to include in script. --exclude-schemas < < ...>> Database objects of this schema to exclude from script. --include-types < < ...>> Database objects of this type to include in script. --exclude-types < < ...>> Database objects of this type to exclude from script. --ansi-padding Generates ANSI Padding statements. --append Append script to file. --check-for-existence Check that an object with the given name exists before dropping or altering or that an object with the given name does not exist before creating. -r, --continue-on-error Continue scripting on error. --convert-uddts Convert user-defined data types to base types. --include-dependencies Generate script for the dependent objects for each object scripted. --exclude-headers Exclude descriptive headers for each object scripted. --constraint-names Include system constraint names to enforce declarative referential integrity. --unsupported-statements Include statements in the script that are not supported on the target SQL Server Version. --disable-schema-qualification Do not prefix object names with the object schema. --bindings Script options to set binding options. --collation Script the objects that use collation. --exclude-defaults Do not script the default values. --exclude-extended-properties Exclude extended properties for each object scripted. --logins Script all logins available on the server, passwords will not be scripted. --object-permissions Generate object-level permissions. --owner Script owner for the objects. --exclude-use-database Do not generate USE DATABASE statement. --statistics Script all statistics. --change-tracking Script the change tracking information. --exclude-check-constraints Exclude check constraints for each table or view scripted. --data-compressions Script the data compression information. --exclude-foreign-keys Exclude foreign keys for each table scripted. --exclude-full-text-indexes Exclude full-text indexes for each table or indexed view scripted. --exclude-indexes Exclude indexes (XML and clustered) for each table or indexed view scripted. --exclude-primary-keys Exclude primary keys for each table or view scripted. --exclude-triggers Exclude triggers for each table or view scripted. --exclude-unique-keys Exclude unique keys for each table or view scripted. --display-progress Display scripting progress. --enable-toolsservice-logging Enable verbose logging. --version show program's version number and exitExamplesBelow are example commands that run against the AdventureWorks database. Here is the list of examples:
Dump datbase object schema
Dump datbase object data
Dump database object schema and data
Include database objects
Exclude database objects
Target server version
Target server edition
Pipe a generated script to sed
Script data to a file
Dump database object schema# generate DDL scripts for all objects in the Adventureworks database and save the script to a filemssql-scripter -S localhost -d AdventureWorks -U sa # alternatively, specify the schema only flag to generate DDL scripts for all objects in the Adventureworks database and save the script to a filemssql-scripter -S localhost -d AdventureWorks -U sa -f ./adventureworks.sqlDump database object data# generate DDL scripts for all objects in the Adventureworks database and save the script to stdout.mssql-scripter -S localhost -d AdventureWorks -U sa --data-onlyDump the database object schema and data# script the database schema and data piped to a file.mssql-scripter -S localhost -d AdventureWorks -U sa --schema-and-data > ./adventureworks.sql # execute the generated above script with sqlcmdsqlcmd -S mytestserver -U sa -i ./adventureworks.sqlInclude database objects# generate DDL scripts for objects that contain 'Employee' in their name to stdoutmssql-scripter -S localhost -d AdventureWorks -U sa --include-objects Employee # generate DDL scripts for the dbo schema and pipe the output to a filemssql-scripter -S localhost -d AdventureWorks -U sa --include-objects dbo. > ./dboschema.sqlExclude database objects# generate DDL scripts for objects that do not contain 'Sale' in their name to stdoutmssql-scripter -S localhost -d AdventureWorks -U sa --exclude-objects SaleTarget server version# specify the version of SQL Server the script will be run againstmssql-scripter -S myServer -d AdventureWorks -U myUser –-target-server-version "AzureDB" > myData.sqlTarget server edition# specify the edition of SQL Server the script will be run againstmssql-scripter -S localhost -d AdventureWorks -U myUser –-target-server-edition "Enterprise" > myData.sqlPipe a generated script to sedNote this example is for Linux and macOS usage.
# change a schema name in the generated DDL script# 1) generate DDL scripts for all objects in the Adventureworks database# 2) pipe generated script to sed and change all occurrences of SalesLT to SalesLT_test and save the script to a file$ mssql-scripter -S localhost -d Adventureworks -U sa | sed -e "s/SalesLT./SalesLT_test./g" > adventureworks_SalesLT_test.sql Script data to a file# script all the data to a file.mssql-scripter -S localhost -d AdventureWorks -U sa --data-only > ./adventureworks-data.sql Environment VariablesYou can set environment variables for your connection string through the following steps:
# set environment variable MSSQL_SCRIPTER_CONNECTION_STRING with a connection string.$ export MSSQL_SCRIPTER_CONNECTION_STRING='Server=myserver;Database=mydb;User Id=myuser;Password=mypassword;'$ mssql-scripter # set environment variable MSSQL_SCRIPTER_PASSWORD so no password input is required.$ export MSSQL_SCRIPTER_PASSWORD='ABC123'$ mssql-scripter -S localhost -d AdventureWorks -U sa