我正在通过链接服务器将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表中。旧数据库没有任何城市和国家/地区ID表。只有你看到城市和国家名称才有机会加入。
编辑:城市名称不是唯一的。
任何帮助都将不胜感激。
答案 0 :(得分: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
答案 1 :(得分: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