2011-05-16 72 views
0

我正在寻找关于如何将SQL数据库中的表的结构复制为同一数据库中的另一个表的想法。在MS Access中创建SQLserver表的唯一副本

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

我可以从CurrentDb通过导航到“TBL课会话详细信息”链接到底层SQL“” dbo.tbl课会话详细信息”表和连接字符串到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

写在数据库端的存储过程:

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]; 

可能想加强一点,使真的确定你仍然有新表中的数据,然后再删除它从原来的...

+0

上面的例子是VB.NET,这里是VBA:http://support.microsoft.com/kb/185125 – mikey 2011-05-16 12:55:14

0

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

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