我正在使用SQL更新查询[在powershell脚本中]来更新列中存在的计算机名称。
列值存储为URL。因此机器名称是字符串的一部分。
(列名:URL 示例列值:“http:// Machine1:80 / Impl100 / Core / Data / Config.0”)
我正在使用以下查询来进行更新。
$UpdateQuery="UPDATE [$DatabaseName].[dbo].[$TableName]
SET $columnName=Replace("$ColumnName", '$OldMachineName', '$NewMachineName');"
假设我的旧机器名称为“Machine1”,我将替换为“AppMachine1”。如果我执行脚本,它将更新“AppMachine1”。但是如果我第二次执行脚本它会将其更新为“AppAppMachine1”,因为Machine1是AppMachine1的一部分。
是否可以在更新前获取列值并检查机器名称?
怎么做?
答案 0 :(得分:1)
试试这个
$UpdateQuery="UPDATE [$DatabaseName].[dbo].[$TableName]
SET $columnName=Replace("$ColumnName", '$OldMachineName', '$NewMachineName')
WHERE "$ColumnName" <> '$NewMachineName';"
答案 1 :(得分:1)
包括双前导斜杠:
... -replace '//machine1','//AppAppMachine1'
您还需要将引用的变量放在双引号中。单引号禁用变量扩展,因此变量不会被其值替换。
以下是双重替换的示例:
PS> $url = 'http://machine1:80/Impl100/Core/Data/Config.0'
PS> $url -replace '//machine1','//AppAppMachine1' -replace '//machine1','//AppAppMachine1'
http://AppAppMachine1:80/Impl100/Core/Data/Config.0