2012-07-24 105 views
1

我正在使用SQL更新查詢[在powershell腳本中]更新列中存在的機器名稱。如何只更新精確值匹配?

列值存儲爲URL。所以機器名稱是字符串的一部分。

(柱名稱:URL 實施例列的值: 「HTTP:// MACHINE1:80/Impl100 /核心/數據/ Config.0」)

我使用下面的查詢來執行更新。

$UpdateQuery="UPDATE [$DatabaseName].[dbo].[$TableName] 
SET $columnName=Replace("$ColumnName", '$OldMachineName', '$NewMachineName');" 

假設我的老機器名是「MACHINE1」和我與「AppMachine1」來代替。如果我執行腳本,它將更新「AppMachine1」。但是,如果我第二次執行該腳本,它將更新爲「AppAppMachine1」,因爲Machine1是AppMachine1的一部分。

是否可以在更新前獲取列值並檢查機器名稱?

如何做到這一點?

+3

有更重的錨定令牌替換? ''// AppMachine1:'' – 2012-07-24 09:30:31

回答

1

試試這個

$UpdateQuery="UPDATE [$DatabaseName].[dbo].[$TableName] 
SET $columnName=Replace("$ColumnName", '$OldMachineName', '$NewMachineName') 
WHERE "$ColumnName" <> '$NewMachineName';" 
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 
+0

在這種情況下,如果機器在試驗字符時發生變化,那麼它將失敗。例如。如果機器名稱被替換爲Machine123,那麼如果我們執行第二次,它將是// Machine1231 – Samselvaprabu 2012-07-24 13:02:28

+0

糟糕,我在替換字符串中添加了雙斜槓。 – 2012-07-24 13:11:58