如何仅更新精确值匹配?

时间:2012-07-24 09:27:59

标签: sql sql-server sql-server-2008 powershell

我正在使用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的一部分。

是否可以在更新前获取列值并检查机器名称?

怎么做?

2 个答案:

答案 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