将数据导入SQL Server时请避免使用CASE子句

时间:2011-10-06 13:54:52

标签: sql sql-server import

我必须将数据从旧架构导入到新架构中,其中曾经是VARCHAR的列'career_name'(在表'users'中)现在应该是INTEGER是另一个表careers的外键。这样我打算简化存储在VARCHAR列中的数据,以保持数据库的完整性。

实际上,我会做以下事情:

  1. 在新架构中创建两个新表
  2. 使用SELECT DISTINCT 'career_name' FROM old_table获取所有可能的值
  3. INSERT到我的新表careers上面获得的行
  4. INSERT数据使用CASE子句进入我的新表users,以便从相应的前careers的表career_name中获取ID,以便创建关系。
  5. 现在问题如下,表careers很大,因此为了导入users而为表中的每一行写一个CASE子句几乎是不可能的。

    有没有办法避免这种情况?我希望我可以使用我的表careers作为关联数组,其中键是前career_name,值是行的ID ...谢谢!

2 个答案:

答案 0 :(得分:2)

  

有没有办法避免这种情况?我希望我可以将我的表'职业'用作关联数组,其中键是前'career_name',值为行ID ...谢谢!

呃......这就是表,不是吗?只需加入您的新职业表,即可在执行插入时将其用作查找:

INSERT INTO users (blah, whatever, career_id)
SELECT
  old_users_table.blah,
  old_users_table.whatever,
  careers.career_id
FROM
  old_users_table INNER JOIN careers ON old_users_table.career_name = careers.career_name

... users是您的新用户表,old_users_table是您要获取要迁移的数据的地方,careers是您的新职业表。

答案 1 :(得分:2)

INSERT into new_Users 
SELECT Users.Name, careers.id
FROM Users inner join careers ON Users.career_name = careers.career_name

因为架构不为我所知,所以我假设new_users表有2列,即name和career_id。