gpt4 book ai didi

Windows Powershell : can I split a large SQL file into small files containing one db object

转载 作者:可可西里 更新时间:2023-11-01 11:17:14 25 4
gpt4 key购买 nike

我们使用 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.SQLCREATE_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com