将表从MS访问迁移到SQL Server并进行整合的最佳方法

时间:2009-09-02 02:28:13

标签: sql sql-server tsql ms-access

我有一个ms访问数据库,每个相册都有一个表,表的名称为albumname

tablename =“旅行” 字段:picID,评论

我正在迁移到sql server,我想解决这个规范化问题并且只有

  1. 一张名为Albums的表格,其中包含albumID和albumName
  2. 一张名为picID,albumID等图片的表格。
  3. 无论如何都要自动执行这个在访问中访问多个表并移入Sql server中的一个表的过程

3 个答案:

答案 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