我正在寻找有关如何将SQL数据库中的表的结构复制为同一数据库中的另一个表的想法。
我有一个SQL数据库(统计信息),其中包含许多大型事务表(即远高于2Gb),这些表链接到我的Access数据库。我需要定期存档当前数据,并在 SQL 数据库中创建一个具有相同结构的新表。
我可以通过从"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 可能是一种选择,但我还没有找到任何关于如何做到这一点的想法。
在数据库端编写一个存储过程:
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];
可能想加强一点,以确保在从原始表中删除数据之前,您仍然在新表中拥有数据......
你有一些顺序错误的参数。您混合了数据库名称和源参数。试试这个:
DoCmd.TransferDatabase acExport, dbType, strTAbleName, acTable, dbsA, sTableNameNew, structureonly:=True