2012-05-22 84 views
2

我的任务是将数据从MSSQL服务器迁移到MySQL服务器。我认为首先将MSSQL数据库转换为MS Access数据库会比较容易,所以我可以将其混淆,然后将其导出为MySQL。在MS Access中将自己的行映射到自己的行

所以,我有一个表,名为公司:

companyID | name  |  c_phon | c_email     | c_address 
    1  StackOverflow  5555555555  [email protected]  NYC 
    2  Google   5558675309  [email protected]   NYC 

在我们的新的数据库,我们更改了这些字段被保存。而不是每行都有电话号码,电子邮件和地址,我们正在使用一个优先表。

首选项:

prefID | prefName 
    1   c_phone 
    2   c_email 
    3   c_address 

我的问题是,如何将我的每个字段转换成它自己排在我们companyPrefs表。它应该是这个样子:

companyID | prefID | prefValue 
    1   1  5555555555 
    1   2  [email protected] 
    1   3  NYC 
    2   1  5558675309 
    2   2  [email protected] 
    2   3  NYC 

我不知道如何使用VBScript或什么的,所以我试图做到这一点使用SQL。

INSERT INTO comanyPrefs (companyID, prefID, prefValue) 
SELECT companyID, prefID, @fieldName 
FROM companies, preferences 
WHERE @fieldName = prefName 

显然,这是行不通的。我如何使用可变字段名称来选择字段?我如何为每个字段插入一行?

回答

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 

演示:http://www.sqlfiddle.com/#!3/5cf87/1

+0

我希望我不会有手动每个字段名称添加到查询。我希望我可以动态地做到这一点。 –

+0

那么你可以从VBA动态构建代码。例如,用一个字符串建立查询,并为每个字段名称,例如例如,'strQuery = strQuery&“SELECT companyID ... where prefName ='”&theFieldName&“',”&theFieldName&“FROM其中”&theFieldName&“不为空的公司。如果您的任何源列不是文本的,您也必须进行可能的转换。 – mellamokb

+0

我不知道如何使用VB,我认为这会花费比我手动输入字段名称更长的时间:-P –