有没有一种简单的方法可以将数据库 SQL 脚本文件分解为每个对象一个文件?
Posted
技术标签:
【中文标题】有没有一种简单的方法可以将数据库 SQL 脚本文件分解为每个对象一个文件?【英文标题】:Is there an easy way to break up a database SQL script file into one file per object? 【发布时间】:2010-11-22 15:46:50 【问题描述】:我有 SQL Servers Tasks -> Generate Scripts... 的输出,用于我数据库中的所有表在一个文件中。
有没有一种简单的方法可以将单个 SQL 脚本分解为每个表一个文件?
显然,如果我可以在选择 File per object 设置的情况下运行 Generate Scripts 任务,我就不会问这个了。
【问题讨论】:
【参考方案1】:运行任务-> 生成脚本任务。在最后的向导页面中选择“脚本到文件”并选择“每个对象的文件”。您必须为输出指定一个现有文件夹。
【讨论】:
我在问题中说我无法重新运行生成脚本任务。不过还是谢谢。【参考方案2】:使用 PowerShell。 在不知道您的 SQL 文件格式的情况下,这可能会或可能不会起作用。它至少应该给你一个起点。它开始写入“table.sql”文件,但后来将该文件重命名为 tablename.sql
1. $lineNumber = 0 2. $inputFile = "test.sql" 3. foreach ($line in Get-Content $inputFile) 4. if ($line -match "create table") 5. $w = [正则表达式]::替换($line, "^.+\.\[(\w+)\].+$", '$1') 6. $outFile = "$w.sql" 7. $lineNumber = 1 8. 9. if (($line -match "use \[dbaInventory\]") -and ($lineNumber -gt 0)) 10. Move-Item -LiteralPath "table.sql" -Destination $outFile 11. 12. $线 |输出文件 -FilePath table.sql -Append 13. 14. Move-Item -LiteralPath "table.sql" -Destination $outFile将第 2 行更改为您当前拥有的任何组合 sql 文件,并更改第 9 行以查找适合您的脚本的任何数据库名称。
这是我用于测试的“test.sql”文件的示例。
使用 [dbaInventory] 去 /****** 对象:表 [dbo].[tableOne] 脚本日期:11/22/2010 12:28:55 ******/ 设置 ANSI_NULLS ON 去 设置 QUOTED_IDENTIFIER ON 去 设置 ANSI_PADDING ON 去 创建表 [dbo].[tableOne]( [colA] [smallint] NULL, [colB] [char](1) 空值, [colC] [十进制](10, 2) NULL ) 开 [主要] 去 设置 ANSI_PADDING 关闭 去 使用 [dbaInventory] 去 /****** 对象:表 [dbo].[tableTwo] 脚本日期:11/22/2010 12:28:55 ******/ 设置 ANSI_NULLS ON 去 设置 QUOTED_IDENTIFIER ON 去 设置 ANSI_PADDING ON 去 创建表 [dbo].[tableTwo]( [col_A] [char](1) 空值, [col_B] [十进制](10, 2) NULL, [col_C] [smallint] NULL, 约束 [Pk_tableTwo] 主键集群 ( [col_A] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) 开 [主要] 去 设置 ANSI_PADDING 关闭 去【讨论】:
以上是关于有没有一种简单的方法可以将数据库 SQL 脚本文件分解为每个对象一个文件?的主要内容,如果未能解决你的问题,请参考以下文章