在MS Access中仅创建SQL Server服务器表的结构副本

时间:2011-05-16 12:29:03

标签: sql-server ms-access access-vba structure

我正在寻找有关如何将SQL数据库中的表结构复制为同一数据库中的另一个表的想法。

我有一个SQL数据库(统计数据),它包含许多链接到我的Access数据库的大型事务表(即远高于2Gb)。我需要定期存档当前数据,并在SQL数据库中创建一个具有相同结构的新表。

我可以从CurrentDb通过“tbl LE​​SSON SESSION DETAILS”链接导航到基础SQL“”dbo.tbl LE​​SSON SESSION DETAILS“表和SQL数据库的连接字符串。

我已经看过使用DoCmd.TransferDatabase来使用以下代码来实现结果: -

dbsA As Database

sTableName = "tbl LESSON SESSION DETAILS"
dbType = "ODBC Database"
sDatabasePath = CurrentDb.TableDefs(sTableName).Connect
Set dbsA = DBEngine(0).OpenDatabase("MyDB", dbDriverCompleteRequired, _
             False, sDatabasePath)
sTableName = dbsA.TableDefs(sTableName).Name
sTableNameNew =  sTableName & "_New"

DoCmd.TransferDatabase acExport, dbType, _
      strTAbleName, acTable, dbsA, sTableNameNew, structureonly:=True

然而,当我运行此代码时,它失败,因为'acExport'期望sTableName在CurrentDB中,而sTableNameNew在dbsA数据库中。改变CurrentDb可能是一种选择,但我还没有找到任何关于如何做到这一点的想法。

2 个答案:

答案 0 :(得分:2)

在数据库端写一个存储过程:

SELECT TOP 1 * INTO [tbl_LESSON_SESSION_DETAILS_NEW] FROM [tbl_LESSON_SESSION_DETAILS];
DELETE FROM [tbl_LESSON_SESSION_DETAILS_NEW];

然后只需从代码中执行存储过程。您可以从代码中替换表名/ w变量,您可以根据需要为新表命名。

http://msdn.microsoft.com/en-us/library/aa258259(v=sql.80).aspx

http://support.microsoft.com/kb/306574

您可能需要考虑将指针保留在原始表中,然后将其存档到新的“备份”版本,然后将其擦除干净:

SELECT * INTO [tbl_LESSON_SESSION_DETAILS_BAK_05152011] FROM [tbl_LESSION_SESSION_DETAILS];
DELETE [FROM tbl_LESSION_SESSION_DETAILS];

可能想要加强一点,以使确定在从原始表中删除数据之前,您仍然可以获得新表中的数据...

答案 1 :(得分:0)

你的错误顺序中有一些参数。您已混合数据库名称和源参数。试试这个:

DoCmd.TransferDatabase acExport, dbType, strTAbleName, acTable, dbsA, sTableNameNew, structureonly:=True