我可以使用PowerShell替换SQL文件中的单个字符串,如下所示:
$newPrefix = "foo'
$dbUserMappingScriptPath = "C:\MySQL_Template.sql"
$updatedDbUserMapingScriptPath = "C:\MySQL.sql"
(gc $dbUserMappingScriptPath).Replace('DBPrefix_',$newPrefix) | sc $updatedDbUserMapingScriptPath
这对单个场景很有用,但我需要替换多个字符串。我尝试了以下内容,但除了用$ newPrefix替换第一个'DBPrefix_'字符串之外,它不执行替换操作。它不会执行“MDFDatabasePath”和“LDFDatabasePath”的替换。
如果给出以下代码段,如何替换多个字符串?请注意,这包含在$ .MDFDatabasePath和$ .LDFDatabasePath值的Foreach-Object中。
$dbUserMappingScriptPath = "C:\MySQL_Template.sql"
$updatedDbUserMapingScriptPath = "C:\MySQL.sql"
(gc $dbUserMappingScriptPath).Replace('DBPrefix_',$newPrefix).Replace('MDFDatabasePath',$_.MDFDatabasePath).Replace('LDFDatabasePath',$_.LDFDatabasePath) | sc $updatedDbUserMapingScriptPath
以下是我的SQL片段:
USE [master]
GO
CREATE DATABASE [DBPrefix_mydb] ON
( FILENAME = N'MDFDatabasePath\DBPrefix_mydb.MDF' ),
( FILENAME = N'LDFDatabasePath\DBPrefix_mydb.ldf' )
FOR ATTACH
GO
更新:我的PowerShell脚本不匹配,因为我在错误的SQL脚本上运行了替换。上面带有额外.Replace的代码就像魅力一样