有没有什么方法可以在模式下编写所有SQL Server对象(表,SP,函数等)?
在我们的数据库中,我们有一个包含所有模式名称的表,并且有超过500个模式。其中一些是dev,有些是prod。我需要编写dev模式下的所有对象并创建一个新数据库。
答案 0 :(得分:4)
ApexSQL Script是在这种情况下非常有用的工具。它是为数据库对象创建SQL脚本的工具,它可以将所有对象分别编写为一个脚本或所有对象。
对于这种情况,你应该做的是:
答案 1 :(得分:1)
谢谢你的回复。我通过SSMS生成所有脚本然后创建了一个仅模式数据库来解决这个问题。我删除了所有表,视图SP,函数等,这些不是我不需要的模式的一部分。
这花了我大约20分钟。但毕竟工作完成了。
答案 2 :(得分:1)
这是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)
}
}
答案 3 :(得分:1)
如果您正在寻找一种解决方案,以便按计划将这些对象编写脚本并自动检入GIT存储库。
查看我共享的以下项目:https://github.com/Drazzing/mssqlobjectstogit
您得到的是:
答案 4 :(得分:0)
您可以使用Redgate SQL Compare 要么 使用management studio生成脚本功能。