我的任务是将数据从MSSQL服务器迁移到MySQL服务器。我认为首先将MSSQL数据库转换为MS Access数据库会更容易,所以我可以把它弄糟,然后将其导出为MySQL。
所以,我有一张桌子,叫做公司:
companyID | name | c_phon | c_email | c_address
1 StackOverflow 5555555555 Joel@stackoverflow.com NYC
2 Google 5558675309 Google@google.com NYC
在我们的新数据库中,我们更改了这些字段的保存方式。我们使用的是prefs表,而不是每行都有电话号码,电子邮件和地址。
首选项:
prefID | prefName
1 c_phone
2 c_email
3 c_address
我的问题是,如何将每个字段转换为我们companyPrefs表中的自己的行。看起来应该是这样的:
companyID | prefID | prefValue
1 1 5555555555
1 2 Joel@stackoverflow.com
1 3 NYC
2 1 5558675309
2 2 Google@google.com
2 3 NYC
我不知道如何使用vbscript或其他什么,所以我试图使用SQL来做到这一点。
INSERT INTO comanyPrefs (companyID, prefID, prefValue)
SELECT companyID, prefID, @fieldName
FROM companies, preferences
WHERE @fieldName = prefName
显然这不起作用。如何使用变量字段名称选择字段?如何为每个字段插入一行?
答案 0 :(得分:2)
你走在正确的轨道上。但是,您需要为每个可能的字段插入,如下所示:
INSERT INTO companyPrefs (companyID, prefID, prefValue)
SELECT companyID, (select prefID from prefs where prefName = 'c_phone'), c_phone
FROM companies where c_phone is not null
UNION
SELECT companyID, (select prefID from prefs where prefName = 'c_email'), c_email
FROM companies where c_email is not null
UNION
SELECT companyID, (select prefID from prefs where prefName = 'c_address'), c_address
FROM companies where c_address is not null