作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们使用 ERWin 进行数据建模,它为所有数据库对象(例如表和 View )生成一个大型 SQL DDL 文件。我正在考虑将这个大文件分成小文件,例如,每个文件包含一个表,一个 View 。
目标是在部署 SQL DDL 时通过将每个表复制/粘贴到执行窗口中来减少手动工作,因为在开发过程中,通常只有少数表会发生变化。
我看到每个 SQL 都以分号“;”结尾所以我希望在 PowerShell 中有一种方法可以找到这个分隔符并将大的 SQL 文件分成许多小的文件。
非常感谢您的帮助!
这是一个包含两个表的示例 SQL 代码。
CREATE SET TABLE TABLE_1,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
NO FALLBACK,
CHECKSUM = DEFAULT
(
CAT_ID INTEGER NOT NULL ,
CAT_SECTION_ID INTEGER NOT NULL ,
CREATE_DTTM TIMESTAMP(6) NOT NULL ,
UPDATE_DTTM TIMESTAMP(6) NULL
)
UNIQUE PRIMARY INDEX UPI_CAT_SECTION
(
CAT_ID,
CAT_SECTION_ID
);
CREATE SET TABLE TABLE_2,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
NO FALLBACK,
CHECKSUM = DEFAULT
(
CH_NUM VARCHAR(8) NOT NULL ,
CH_YEAR SMALLINT NOT NULL ,
CREATE_DTTM TIMESTAMP(6) NOT NULL ,
LAST_UPDATE_DTTM TIMESTAMP(6) NULL
)
UNIQUE PRIMARY INDEX UPI_TABLE_2
(
CH_NUM,
CH_YEAR,
);
最佳答案
这是一个脚本,可以将您的大文件拆分成多个较小的文件,在每行包含一个分号之后开始一个新文件。它根据分号后的第一个非空行生成文件名(在您的示例中,这两个文件名将是 CREATE_SET_TABLE_CATALOG.SQL 和 CREATE_SET_TABLE_CHASSIS.SQL。
$buffer = @()
$filename = $null
Get-Content '.\LARGEFILE.SQL' | ForEach-Object {
$line = $_
$buffer += @($line)
if ([String]::IsNullOrWhiteSpace($filename)) {
$filename = $line.Trim().Replace(',','') -replace '[^a-zA-Z0-9_.]+', '_'
}
if ($line.Contains(';')) {
$buffer | Out-File "$filename.SQL" -Encoding utf8
$buffer = @()
$filename = $null
}
}
关于Windows Powershell : can I split a large SQL file into small files containing one db object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167085/
我是一名优秀的程序员,十分优秀!