Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在特定架构下编写所有SQL对象的脚本_Sql_Sql Server_Tsql - Fatal编程技术网

在特定架构下编写所有SQL对象的脚本

在特定架构下编写所有SQL对象的脚本,sql,sql-server,tsql,Sql,Sql Server,Tsql,是否有任何方法可以在模式下编写所有SQL Server对象(表、SP、函数等)的脚本 在我们的数据库中,有一个包含所有模式名称的表,其中有500多个模式。其中一些是针对dev的,一些是prod的。我需要编写dev模式下的所有对象的脚本,并创建一个新的数据库 您可以使用Redgate SQL Compare 或 使用management studio生成脚本功能。感谢各位的回复。我已经解决了这个问题,通过SSM生成了所有脚本,然后创建了一个只有模式的数据库。然后我删除了所有不属于我不需要的模式的表

是否有任何方法可以在模式下编写所有SQL Server对象(表、SP、函数等)的脚本


在我们的数据库中,有一个包含所有模式名称的表,其中有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脚本的工具,它可以将所有对象脚本化为一个脚本或单独的所有对象

对于这种情况,您应该做以下几点:

  • 选择要编写脚本并加载的服务器和数据库
  • 转到“视图”选项卡,单击“对象过滤器”按钮,然后选择“编辑过滤器”按钮:
  • 在所有对象的过滤器编辑器中,选择“包含如果:”和“单击此处添加过滤器条件”:
  • 选择“Schema”、“Equals”并输入所需的Schema名称,然后单击OK:
  • 单击“主页”选项卡,选中所有对象,然后单击“脚本”按钮:
  • 在同步向导的第三步中,在“脚本文件”选项卡下,从“粒度”下拉菜单中选择是否要为所有对象或每个对象分别创建一个脚本:
  • 在脚本向导的最后一步中,单击“创建”按钮并查看结果–您将获得可在SQL Server Management Studio中执行的脚本

  • 如果您正在寻找一种解决方案,以使这些对象按计划编写脚本并自动签入GIT Repo

    查看我共享的以下项目:

    你得到的是:

  • 在[GIT]中随时间对MS SQL对象的更改
  • 显示随时间增加/删除/更改对象的人的报告[CSV]
  • 报告示例:

    但它会写出所有对象的脚本。我需要为属于某个特定架构的对象编写脚本。也要使用sys.sql_模块。为此,您应该将PowerShell环境与ScriptingOptions对象一起使用。使用两个不同的数据库(一个用于开发,另一个用于“生产”版本)可能会很有用。我使用数据库分支,而且部署过程(另外还有持续集成过程)非常清晰和舒适。然后,您可以使用一个简单的脚本、SSM或其他一些第三方工具来比较模式。