使用 Powershell 从 SQL 脚本中删除多余的 GO
Remove redundant GOs from SQL script using Powershell
在通过 Invoke-sqlcmd 进行部署之前,我需要从大型 SQL 文件中删除冗余的 GO 语句。
多个 GO 语句一起导致 "There are no batches in the input script" 并使用 -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
如果将脚本加载到变量中,可以使用正则表达式来匹配和替换多个"GO"语句。例如:
$ReplacedText = $OriginalScript -replace '(GO(\n)*){2,}',"GO`n"
正则表达式匹配 "GO" 后跟换行符 2 次或更多次。并将其替换为单个 "GO" 后跟一个新行。
在通过 Invoke-sqlcmd 进行部署之前,我需要从大型 SQL 文件中删除冗余的 GO 语句。 多个 GO 语句一起导致 "There are no batches in the input script" 并使用 -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
如果将脚本加载到变量中,可以使用正则表达式来匹配和替换多个"GO"语句。例如:
$ReplacedText = $OriginalScript -replace '(GO(\n)*){2,}',"GO`n"
正则表达式匹配 "GO" 后跟换行符 2 次或更多次。并将其替换为单个 "GO" 后跟一个新行。