根据匹配的模式

时间:2016-06-17 06:46:29

标签: sql sql-server

我有一个配置表,其中存储了应用程序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替换为www.yyy.com。为了达到这个目的,我做了类似

的事情
  • 在类似模式上编写选择查询
  • 循环访问数据并逐行替换每一行中的数据。

所以现在我正在寻找一种更好的方法来实现同样的目标。请帮忙!

3 个答案:

答案 0 :(得分:1)

唯一可能的问题是当www.xxx.com位于网址中间的某个位置时,它不应该被替换。例如,在网址字符' '中使用一些禁止使用的内容。

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

答案 1 :(得分: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 .....

答案 2 :(得分:0)

我怀疑你想要这样的东西:

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

这将在配置表中为yyy复制xxx的键值。