2012-12-24 34 views
0

我正在通過鏈接服務器將Oracle DB遷移到SQL Server。這是我的問題;在數據庫遷移過程中從多個相關表插入

我的表在Oracle這樣的:

OldPersonelTable

PERSONID SSN COUNTRY CITY 
------------------------------- 
    1  123 RUSSIA MOSCOW 
    2  124 TURKEY ISTANBUL 
    3  125 TURKEY ANKARA 

而且在我的新的SQL Server數據庫中,我有表是這樣的:

CountryTable

COUNTRYID COUNTRYNAME 
---------------------  
1   RUSSIA 
2   TURKEY 

CITYTABLE

CITYID COUNTRYID CITYNAME 
-------------------------  
1   1  MOSCOW 
2   2  ISTANBUL 
3   2  ANKARA 

NewPersonelTable

PERSONID SSN COUNTRY CITY 
1  123 1   1 
2  124 2   2 
3  125 2   3 

是的,這就是全部。我只想寫一個插入查詢從OldDatabase中選擇並插入到新的personel表中。舊的db沒有任何城市和國家的id表。只有加入的機會就像你看到的城市和國家的名字一樣。

編輯:城市名稱不是唯一的。

任何幫助,將不勝感激。

+1

歡迎StackOverflow上:如果您發佈的代碼,XML或數據樣本,** **請在突出的那些行文本編輯器並點擊編輯器工具欄上的「代碼示例」按鈕(「{}」),以精確地格式化和語法突出顯示它! –

+0

你在Oracle中有CountryTable和city table嗎? – Mari

+0

不幸的是我不。我只是在oldPersonelTable中命名,而國家和城市表在我的新分區中。我試圖保持與他們的ID列newPersonelTable列。也感謝下面我說的citynames不是唯一的 – Gokay

回答

1

假設CITYTABLE和已填充CountryTable,您可以填充NewPersonelTable這樣的:

如果PERSONID是NewPersonelTable的主鍵,那麼你可能需要做的:

SET IDENTITY_INSERT ON 

然後運行:

INSERT INTO NewPersonelTable (PERSONID, SSN, COUNTRY, CITY) 
SELECT T.PERSONID, T.SSN, C.COUNTRYID, CITY.CITYID 
FROM OldPersonelTable T JOIN CountryTable C ON 
    T.COUNTRY = C.COUNTRYNAME JOIN CITYTABLE CITY ON 
    T.CITY = CITY.CITYNAME AND 
    C.COUNTRYID = CITY.COUNTRYID 
+0

我已經有國家和城市表,但從OldpersonelTable選擇與城市和國家的ID是問題 – Gokay

+0

@Gokay我已更新我的回答 –

+0

謝謝,但還有一個問題。城市名稱不是唯一的,但countrynames是絕對唯一的 – Gokay

0

這樣做是在兩個步驟需要此遷移任務: 1-複製主要數據 2-複製關係數據

首先確保新表的主鍵是IDENTITY。 如下: 1)複製數據

INSERT INTO CountryTable(COUNTRYNAME) 
SELECT DISTINCT COUNTRY FROM OraLink...OldPersonelTable 

INSERT INTO CityTable(CITYNAME) 
SELECT DISTINCT CITY FROM OraLink...OldPersonelTable 

INSERT INTO NewPersonelTable(SSN) 
SELECT DISTINCT SSN FROM OraLink...OldPersonelTable 

2)複製關係

UPDATE CityTable SET COUNTRYID=CountryTable.COUNTRYID 
FROM OraLink...OldPersonelTable O INNER JOIN CountryTable 
ON O.Country=CountryTable.COUNTRYNAME 
WHERE CITYNAME=City 

UPDATE NewPersonelTable SET COUNTRY=CountryTable.COUNTRYID, CITY=CityTable.CITYID 
FROM OraLink...OldPersonelTable O INNER JOIN CountryTable 
ON O.Country=CountryTable.COUNTRYNAME 
INNER JOIN CityTable ON O.CITY=CityTable.CITYNAME 
WHERE NewPersonelTable.SSN=O.SSN 
相關問題