0

我正在通过链接服务器将 Oracle DB 迁移到 SQL Server。这是我的问题;

我在 Oracle 上有这样的表:

老人事表

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

在我的新 SQL Server 数据库中,我有这样的表:

国家表

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

城市表

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

新人事表

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

是的,仅此而已。我只想写一个从 OldDatabase 中选择的插入查询并插入到新的个人表中。旧 db 没有任何城市和国家/地区 id 表。加入的唯一机会是您看到城市和国家/地区名称。

编辑:城市名称不是唯一的。

任何帮助,将不胜感激。

4

2 回答 2

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
于 2012-12-24T10:48:54.650 回答
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
于 2012-12-26T20:58:01.470 回答