我正在尝试使用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
答案 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;
答案 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;