在特定架构下编写所有SQL对象的脚本
是否有任何方法可以在模式下编写所有SQL Server对象(表、SP、函数等)的脚本在特定架构下编写所有SQL对象的脚本,sql,sql-server,tsql,Sql,Sql Server,Tsql,是否有任何方法可以在模式下编写所有SQL Server对象(表、SP、函数等)的脚本 在我们的数据库中,有一个包含所有模式名称的表,其中有500多个模式。其中一些是针对dev的,一些是prod的。我需要编写dev模式下的所有对象的脚本,并创建一个新的数据库 您可以使用Redgate SQL Compare 或 使用management studio生成脚本功能。感谢各位的回复。我已经解决了这个问题,通过SSM生成了所有脚本,然后创建了一个只有模式的数据库。然后我删除了所有不属于我不需要的模式的表
在我们的数据库中,有一个包含所有模式名称的表,其中有500多个模式。其中一些是针对dev的,一些是prod的。我需要编写dev模式下的所有对象的脚本,并创建一个新的数据库 您可以使用Redgate SQL Compare 或
使用management studio生成脚本功能。感谢各位的回复。我已经解决了这个问题,通过SSM生成了所有脚本,然后创建了一个只有模式的数据库。然后我删除了所有不属于我不需要的模式的表、视图、函数等
我花了大约20分钟才完成。但是在所有的工作完成之后 这是PowerShell对您问题的答案
$Server= 'SERVER_NAME'
$Database= 'DATABASE_NAME'
$SmoScriptPath = 'SCRIPT_OUTPUT.SQL'
$Schemas = @("dlo", "deo") # include objects that fall under this schema set
$ObjectTypes = @("StoredProcedures", "Views", "Tables") #object types to be included
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("System.Data") | Out-Null
$SmoServer = new-object "Microsoft.SqlServer.Management.SMO.Server" $Server
$SmoServer.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.View], "IsSystemObject")
$SmoDb = New-Object "Microsoft.SqlServer.Management.SMO.Database"
$SmoDb = $SmoServer.Databases[$Database]
$SmoScr = New-Object "Microsoft.SqlServer.Management.Smo.Scripter"
$SmoScr.Server = $SmoServer
$SmoScr.Options = New-Object "Microsoft.SqlServer.Management.SMO.ScriptingOptions"
$SmoScr.Options.AllowSystemObjects = $false
$SmoScr.Options.IncludeDatabaseContext = $true
$SmoScr.Options.IncludeIfNotExists = $false
$SmoScr.Options.ClusteredIndexes = $true
$SmoScr.Options.Default = $true
$SmoScr.Options.DriAll = $true
$SmoScr.Options.Indexes = $true
$SmoScr.Options.NonClusteredIndexes = $true
$SmoScr.Options.IncludeHeaders = $false
$SmoScr.Options.ToFileOnly = $true
$SmoScr.Options.AppendToFile = $true
$SmoScr.Options.ScriptDrops = $false
$SmoScr.Options.Triggers = $true
$SmoScr.Options.ExtendedProperties = $true
$SmoScr.Options.FileName = $SmoScriptPath
New-Item $SmoScr.Options.FileName -type file -force | Out-Null
Foreach ($ObjectType in $ObjectTypes) {
$Objects = $SmoDb.$ObjectType | where {$_.IsSystemObject -eq $false -and $Schemas.Contains($_.Schema)}
Foreach ($Object in $Objects | where {$_ -ne $null})
{
$SmoScr.Script($Object)
}
}
是在这种情况下非常有用的工具。它是为数据库对象创建SQL脚本的工具,它可以将所有对象脚本化为一个脚本或单独的所有对象
对于这种情况,您应该做以下几点:
如果您正在寻找一种解决方案,以使这些对象按计划编写脚本并自动签入GIT Repo 查看我共享的以下项目: 你得到的是:
但它会写出所有对象的脚本。我需要为属于某个特定架构的对象编写脚本。也要使用sys.sql_模块。为此,您应该将PowerShell环境与ScriptingOptions对象一起使用。使用两个不同的数据库(一个用于开发,另一个用于“生产”版本)可能会很有用。我使用数据库分支,而且部署过程(另外还有持续集成过程)非常清晰和舒适。然后,您可以使用一个简单的脚本、SSM或其他一些第三方工具来比较模式。