使用Powershell从SQL脚本中删除多余的GO

时间:2018-07-17 19:22:04

标签: powershell powershell-v3.0 powershell-v4.0

我需要从大型SQL文件中删除多余的GO语句,然后再将其通过Invoke-sqlcmd进行部署。 多个GO语句一起导致“输入脚本中没有批处理”,并使用-OutputSqlErrors $ false掩盖了所有其他错误。

Get-Unique删除所有重复的数据-这是不希望的。我只想删除重复的GO语句

当前脚本:

Exec (@SQLScript)
Print @SQLScript
End
GO
GO

if obj is not null
    drop procedure 
go

CREATE PROC 
    @al varchar(16),
    @rule      varchar(128)
END CATCH
GO
GO

If Exists (Select * From Table)
Go 
    Set @Start = DateAdd(m, 1, @Start)
End 
GO
GO

我想要这样的脚本:

Exec (@SQLScript)
Print @SQLScript
End
GO

if obj is not null
    drop procedure 
go

CREATE PROC 
    @al varchar(16),
    @rule      varchar(128)
END CATCH
GO

If Exists (Select * From Table)
Go 
    Set @Start = DateAdd(m, 1, @Start)
End 
GO

1 个答案:

答案 0 :(得分:2)

如果将脚本加载到变量中,则可以使用正则表达式来匹配并替换多个“ GO”语句。例如:

$ReplacedText = $OriginalScript -replace '(GO(\n)*){2,}',"GO`n"

正则表达式匹配“ GO”,可能会或可能不会后跟换行两次或更多次。并用一个“ GO”替换它,然后换行。