SQL - 使用INSERT INTO移动表数据 - 在移动之前检查值

时间:2014-04-30 16:51:18

标签: sql sql-server sql-server-2008 insert-into

我正在尝试使用INSERT INTO将值从一个表移动到另一个表,并且我不太确定如何在移动它之前检查旧表中的值(并添加字符串)到新桌子。

以下是我的表格定义

Old_network

user_id | network_id | network_url
2         3            /whatever/something.html

新网络(理想结果)

 user_id | network_id | network_url
 2         3           www.sitename3.com/whatever/something.html

网络

network_id |  network_prefix
1             www.sitename1.com
2             www.sitename2.com
3             www.sitename3.com

所以,这里发生的是我使用network_id的查找表,并将network_prefix添加到[network_url]。如果old_network.network_url不包含前缀,我需要将其添加到new_network.network_url的开头。

移动原始数据很容易,但我仍然坚持如何验证并在必要时添加字符串。这是逻辑的概述:

INSERT INTO dbo.new_network (user_id,network_id,network_url)
SELECT user_id,network_id,network_url FROM old_network    


if old_network.network_id = 1 and network_url like 'www.sitename1.com%'
move it
else
set network_url = 'www.sitename1.com' + network_url

等等dbo.network中的其他网络

输入并查看它给了我一些见解,但是我需要声明临时表吗?使用参数?任何想法都表示赞赏。 使用mssql 2008

2 个答案:

答案 0 :(得分:1)

您可以使用CASE与常规JOIN进行决策并插入正确的值。如果我理解你的问题,应该这样做;

INSERT INTO new_network (user_id,network_id,network_url)
 SELECT u.user_id, u.network_id, 
   CASE WHEN u.network_url LIKE s.network_prefix+'%' 
        THEN u.network_url
        ELSE s.network_prefix + '/' + u.network_url END
 FROM url_table u
 JOIN network_table s
 ON u.network_id=s.network_id;

An SQLfiddle to test with

答案 1 :(得分:0)

您只想要一个case声明吗?

INSERT INTO dbo.new_network(user_id, network_id, network_url)
    SELECT user_id, network_id,
           (case when old_network.network_id = 1 and old_network.network_url like 'www.sitename1.com%'
                 then old_network.network_url
                 else 'www.sitename1.com' + old_network.network_url
    FROM old_network;