2014-04-30 40 views
0

我正在做一些實驗,使用INSERT INTO將值從一個表移動到另一個表,我不太確定如何檢查舊錶中的值(並添加一個字符串),然後將其移至新表格。SQL - 使用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; 

An SQLfiddle to test with

+1

我甚至沒有考慮過使用case語句,這肯定會完成這項工作。感謝您花時間製作小提琴。 – apoji187

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;