Har*_*ald 24 sql-server scripting
我正在运行 SQL Server 2012。
SQL Server Management Studio 可以选择右键单击数据库,然后选择任务和生成脚本。
有没有办法通过命令行以某种方式自动化?
我想创建一个包含整个数据库的架构和数据的脚本。
之类的工具ScriptDB,并sqlpubwiz.exe似乎都针对SQL Server 2005的什么有关SQL Server 2012?
Kin*_*hah 21
最好是使用 Powershell - 如果您要经常使用它。您可以参考使用Powershell和 SMO自动生成脚本。
此外,SQL Server PowerShell 扩展 (SQLPSX)在使用 Powershell 时非常有价值。所有模块都有帮助文件,例如Get-SqlScripter。
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path D:\scripts\script.sql
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlView | Get-SqlScripter
Run Code Online (Sandbox Code Playgroud)
对于第三方工具,强烈建议查看(那里有很多第三方工具,但以下是我使用过的,它们很棒):
Bra*_*adC 13
来自 Microsoft 的 Tara Raj最近宣布 Microsoft SQL 团队发布了一组命令行工具来生成 T-SQL 脚本,这些脚本似乎完全按照您的要求执行:
mssql 脚本程序
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 构建的,并结合了新 Azure CLI 2.0 工具的可用性原则。源代码可以在 Github 上找到,网址为https://github.com/Microsoft/sql-xplat-cli,我们欢迎您的贡献和拉取请求!
一些使用示例:
为 Adventureworks 数据库中的所有数据库对象(默认)生成 DDL 脚本并输出到标准输出
$ mssql-scripter -S localhost -d AdventureWorks -U sa
Run Code Online (Sandbox Code Playgroud)
为 Adventureworks 数据库中的所有数据库对象和 DML 脚本(INSERT 语句)生成 DDL 脚本并将脚本保存到文件
$ mssql-scripter -S localhost -d AdventureWorks -U sa –schema-and-data > ./output.sql
Run Code Online (Sandbox Code Playgroud)
我编写了一个名为SchemaZen 的开源命令行实用程序来执行此操作。它比来自管理工作室的脚本要快得多,而且它的输出对版本控制更友好。它支持对模式和数据进行脚本编写。
要生成脚本,请运行:
schemazen.exe 脚本 --server localhost --database db --scriptDir c:\somedir
然后从脚本运行重新创建数据库:
schemazen.exe 创建 --server localhost --database db --scriptDir c:\somedir
小智 5
只是更新:在当前版本的 SQL Server powershell 模块(我相信 SQL Server 2014 及更高版本。在 SSMS 17 上测试)中,大多数选项都是本机命令和方法。
例如,您可以使用Get-SqlDatabase以及.Script()和.EnumScript()等方法。它确实非常有用且简单,特别是如果您想要更精细的方法(特定表和其他对象)。
例如,这将为用户定义的函数生成 CREATE 脚本并将其保存到文件中:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Run Code Online (Sandbox Code Playgroud)
如果您想对数据和元素(如索引、键、触发器等)编写脚本,则必须指定脚本选项,如下所示:
$scriptOptions = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions
$scriptOptions.NoCollation = $True
$scriptOptions.Indexes = $True
$scriptOptions.Triggers = $True
$scriptOptions.DriAll = $True
$scriptOptions.ScriptData = $True
$Database.Tables.EnumScript($scriptOptions) | Out-File -FilePath ".\AllMyTables.sql"
Run Code Online (Sandbox Code Playgroud)
请注意,Script() 方法不支持脚本数据。对表使用 EnumScript()。
单个表:
($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)
Run Code Online (Sandbox Code Playgroud)
所有视图,每个视图保存一个文件,删除并创建脚本:
ForEach ($view in $($Database.Views | Where Schema -eq "dbo")) {
"`nIF OBJECT_ID('$($view.Name)') IS NOT NULL DROP VIEW $($view.Name);`n`n" | Out-File -FilePath ".\SqlScripts\$($view.Name).sql"
$view.Script() | Out-File -FilePath ".\SqlScripts\$($view.Name).sql" -Append
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。