Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在每个匹配的字符串值之前添加文件中的文本_Sql Server_Powershell_Text_Replace_Append - Fatal编程技术网

Sql server 在每个匹配的字符串值之前添加文件中的文本

Sql server 在每个匹配的字符串值之前添加文件中的文本,sql-server,powershell,text,replace,append,Sql Server,Powershell,Text,Replace,Append,我有一个包含697个存储过程的CREATE语句的SQL文件,但不幸的是,由于语法问题,它无法执行 脚本需要在每个CREATE过程调用之间使用GO语句 问题是:如何在每个创建过程语句之前添加GO 我希望通过使用PowerShell代码来实现这一点 Select字符串可能会指引我们正确的方向,因为它能够在SQL文件中找到697个存储过程。下面的数字是697。但不知道如何使用它在每个查找前添加文本 (Select-String -Path $sqlFile -Pattern "CREATE

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

脚本需要在每个
CREATE过程
调用之间使用
GO
语句

问题是:如何在每个
创建过程
语句之前添加
GO

我希望通过使用PowerShell代码来实现这一点

Select字符串
可能会指引我们正确的方向,因为它能够在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时遇到不正确的语法


谢谢您的帮助。

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

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

GO
*不是SQL语句!它是SQL Server Management Studio和SQL Server空间中的一些Microsoft库使用的分隔符,但它是特定于SQL Server的,并不是一个标准化的SQL元素,不过请注意,
`n
不是一个字符;这是一个转义序列,在PowerShell中扩展为LF角色。一个稍慢但重复性较低的解决方案是:
(获取内容$sqlFile)-替换“创建过程”,“GO`n`$&”|设置内容$sqlFile