2016-06-17 37 views
-1

我有一個配置表,其中存儲應用程序url。應用程序在各種服務器上,每當我們需要設置一個新的服務器時,我們需要通過選擇並在sql中運行一個while循環來更新這些值。 Scenerios就像根據匹配模式更新列的某些部分

表:配置 值

Id | key | DefaultUrl 

1 | Key1 | www.xxx.com/something1 

2 | key2 | www.xxx.com/something2 

3 | key3 | www.xxx.com/something3 

有這個模式和其他一些表太多多個鍵。由於這是一款傳統軟件,我無法更改結構。

每當我需要安裝一個新的服務器,那麼我需要將www.xxx.com的url部分替換爲www.yyy.com。要做到這一點我做這樣的事情

  • 通過將數據寫入一個選擇查詢上類似的圖案
  • 循環和更換每一行一個數據。

所以現在我正在尋找一個更好的方法來實現相同。請幫忙!

+0

hawe你試過什麼了嗎? – xdd

+0

在我的腦海裏或在谷歌沒有什麼東西,我只是使用這種選擇和循環的方法 –

+1

「我不能改變結構」 - 一個新的基表在靜態和動態部分在不同的列,然後一個'VIEW'將分割的部分重新放在一個單獨的列中,其中'VIEW'與原始(現在被刪除)表的名稱相同? – onedaywhen

回答

1

唯一可能的問題是當www.xxx.com位於URL中間的某個位置,它不應該被替換。例如,在url字符' '中使用一些禁止。

UPDATE [Configuration Values] 
SET DefaultUrl = replace(' '+DefaultUrl, ' www.xxx.com', 'www.yyy.com') 
WHERE DefaultUrl LIKE 'www.xxx.com%' 
0

您可以使用替換功能。試試這個樣子,

DECLARE @Table TABLE (
    id INT 
    ,[key] VARCHAR(10) 
    ,DefaultUrl VARCHAR(100) 
    ) 

INSERT INTO @Table 
VALUES (
    1 
    ,'Key1' 
    ,'www.xxx.com/something1' 
    ) 
    ,(
    2 
    ,'key2' 
    ,'www.xxx.com/something2' 
    ) 
    ,(
    3 
    ,'key3' 
    ,'www.xxx.com/something3' 
    ) 

SELECT replace(DefaultUrl, 'www.xxx.com', 'www.yyy.com') 
FROM @Table 

UPDATE @Table 
SET DefaultUrl = replace(DefaultUrl, 'www.xxx.com', 'www.yyy.com') 
where ..... 
0

我懷疑你想是這樣的:

insert into configuration (key, defaulturl, . . .) 
    select key, replace(defaulturl, 'www.xxx.com', 'www.yyy.com') 
    from configuration 
    where defaulturl like '%www.xxx.com%'; 

這將複製鍵值爲XXX在配置表YYY。

相關問題