【发布时间】:2013-09-23 09:56:27
【问题描述】:
如何使用 powershell 批量拆分文件?
我有一个包含多个批次的 sql 部署后文件。下面是我的 postDeployment.sql 文件的示例。
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'StoredProc') AND type in (N'P', N'PC'))
BEGIN
DROP PROCEDURE [dbo].[StoredProc]
END
** GO **
CREATE PROCEDURE [dbo].[StoredProc]
@nodeId int = 0
AS
BEGIN
SET NOCOUNT ON;
END
**GO**
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'StoredProc') AND type in (N'P', N'PC'))
BEGIN
DROP PROCEDURE [dbo].[StoredProc]
END
**GO**
CREATE PROCEDURE [dbo].[StoredProc]
@nodeId int = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
END
$_
我需要自己执行每个批次。突出显示的 ** GO ** 上的 Shile 拆分
我的 PS 命令如下(不能正常工作):
function GetSqlBatchesFromString($file)
{
$buffer = new-object System.Text.StringBuilder
switch -regex -file $file {
"^\s*GO[\s\d]*$"
{
# $__ returns go
$buffer.ToString();
$buffer.Length = 0;
}
default
{
$temp = $buffer.AppendLine($_);
}
}
$buffer.ToString();
}
function ExecuteBatch($batch)
{
Write-Host "Batch part ==== start"
Write-Host $batch
Write-Host "Batch part ==== end"
}
GetSqlBatchesFromString "D:\PostDeployment.sql" | % { ExecuteBatch $__}
【问题讨论】:
-
后续问题要求进行更稳健的处理,以排除出现在引用字符串和 cmets 中的单词
GO的误报:stackoverflow.com/q/70161661/45375
标签: sql powershell