我在一个文件中为我的数据库中的所有表输出了 SQL Servers Tasks -> Generate Scripts...。
有没有一种简单的方法可以将单个 SQL 脚本分解为每个表一个文件?
显然,如果我可以在选择 File per object 设置的情况下运行 Generate Scripts 任务,我就不会问这个问题了。
我在一个文件中为我的数据库中的所有表输出了 SQL Servers Tasks -> Generate Scripts...。
有没有一种简单的方法可以将单个 SQL 脚本分解为每个表一个文件?
显然,如果我可以在选择 File per object 设置的情况下运行 Generate Scripts 任务,我就不会问这个问题了。
运行任务-> 生成脚本任务。在最后的向导页面中选择“脚本到文件”并选择“每个对象的文件”。您必须为输出指定一个现有文件夹。
使用 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
更改您当前拥有的任何组合 sql 文件的第 2 行和第 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 关闭 去