【问题标题】:Add text in file before every matched string value在每个匹配的字符串值之前在文件中添加文本
【发布时间】:2021-03-19 04:00:26
【问题描述】:

我有这个 SQL 文件,其中包含 697 个存储过程的 CREATE 语句,但不幸的是,由于语法问题,它不会执行。

该脚本需要在每个CREATE PROCEDURE 调用之间使用GO 语句。

问题是:如何在每个CREATE PROCEDURE 语句之前添加GO

我希望通过使用 PowerShell 代码来实现这一目标。

Select-String 可能会引导我们朝着正确的方向前进,因为它能够在 SQL 文件中找到 697 个存储过程。下面返回的计数为 697。但不知道如何使用它在每个结果前面添加文本。

(Select-String -Path $sqlFile -Pattern "CREATE PROCEDURE" -AllMatches).Matches.Count

我还尝试使用以下命令替换文件中的文本

(Get-Content $sqlFile).replace('CREATE PROCEDURE', ' GO CREATE PROCEDURE') | Set-Content $sqlFile

然而,这在执行 SQL 脚本时导致了错误:

发生了致命的脚本错误。解析 GO 时遇到语法错误

感谢您的帮助。

【问题讨论】:

  • GO *不是 SQL 语句!它是 SQL Server Management Studio 和 SQL Server 空间中的一些 Microsoft 库使用的 分隔符 - 但它是特定于 SQL Server 的,根本不是标准化的 SQL 元素

标签: sql-server powershell text replace append


【解决方案1】:

找到了解决方案。使用`n字符。

(Get-Content $sqlFile).replace('CREATE PROCEDURE', " GO `n CREATE PROCEDURE") | Set-Content $sqlFile

【讨论】:

  • 很好,不过请注意`n 不是字符;它是一个 转义序列,在 PowerShell 中扩展为 expandable (interpolating) string 中的 LF 字符。基于-replace operator 的稍慢但重复性较低的解决方案是:(Get-Content $sqlFile) -replace 'CREATE PROCEDURE', " GO `n `$&" | Set-Content $sqlFile
猜你喜欢
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
相关资源
最近更新 更多