我有一个ms访问数据库,每个相册都有一个表,表的名称为albumname
tablename =“旅行” 字段:picID,评论
我正在迁移到sql server,我想解决这个规范化问题并且只有
无论如何都要自动执行这个在访问中访问多个表并移入Sql server中的一个表的过程
答案 0 :(得分:1)
进一步添加到@rexem,您可以使用以下查询获取Access中的表名(即专辑)列表
SELECT ID, Name
FROM msysobjects
WHERE type = 1 AND flags=0
您可以使用它将记录INSERT到Albums表中(通过创建链接表到SQL Server DB的Album表)。
编辑:我正在使用Access 2007&无法看到“显示系统对象”选项 或者,您必须编写代码以获取MS-Access中的表
查看此链接是否有帮助 - http://www.microsoft.com/technet/scriptcenter/resources/qanda/jun06/hey0608.mspx
答案 1 :(得分:1)
感谢您的提示。 。我使用下面的代码工作了。
public void InsertIntoSQL()
{
string accessDataSource = ConfigurationSettings.AppSettings["photosDB"];
OleDbConnection msAccessConnection = new OleDbConnection(accessDataSource);
msAccessConnection.Open();
string SQLServerDataSource = ConfigurationManager.ConnectionStrings["kantro_49478ConnectionString"].ConnectionString;
var sqlConnection = new SqlConnection(SQLServerDataSource);
sqlConnection.Open();
DataTable table = msAccessConnection.GetSchema("tables");
foreach (DataRow row in table.Rows)
{
string albumName = row[2].ToString();
if (!string.IsNullOrEmpty(albumName) && !albumName.StartsWith("~"))
{
string sql = "Select * from " + albumName;
OleDbDataAdapter objCommand1 = new OleDbDataAdapter(sql, msAccessConnection);
DataSet ds1 = new DataSet();
objCommand1.Fill(ds1);
SqlDataAdapter objCommand = new SqlDataAdapter("Select album_id from PhotoAlbums where album_name = '" + albumName + "'", sqlConnection);
DataSet ds = new DataSet();
objCommand.Fill(ds);
string albumID = ds.Tables[0].Rows[0][0].ToString();
foreach (DataRow dRow in ds1.Tables[0].Rows)
{
string sql1 = "INSERT INTO Pictures VALUES (" + dRow[0].ToString() + ", " + albumID + ")";
SqlCommand myCommand = new SqlCommand(sql1);
myCommand.Connection = sqlConnection;
myCommand.ExecuteNonQuery();
}
}
}
msAccessConnection.Close();
}
答案 2 :(得分:0)
您可以先将其迁移到SQL Server,然后再进行转换。可能比尝试使用Access和SQL Server更容易。
这是一个SQL Server访问迁移工具。
http://www.microsoft.com/sqlserver/2005/en/us/migration-access.aspx