Создание только структуры копии таблицы SQLserver в MS Access - PullRequest
0 голосов
/ 16 мая 2011

Я ищу идеи о том, как скопировать структуру таблицы в базе данных SQL как другую таблицу в той же базе данных.

У меня есть база данных SQL (статистика), которая содержит несколько больших транзакционных таблиц (т.е. значительно больше 2 ГБ), которые связаны с моей базой данных Access. Периодически мне нужно архивировать текущие данные и создавать новую таблицу с такой же структурой и в базе данных SQL.

Я могу перейти от CurrentDb по ссылке «tbl LESSON SESSION DETAILS» на базовую таблицу SQL «dbo.tbl LESSON 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 ]

2 голосов
/ 16 мая 2011

Напишите хранимую процедуру в конце базы данных:

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

, вероятно, нужно немного увеличить это, чтобы действительно был уверен1016 * у вас все еще есть данные в новой таблице, прежде чем вы удалите их из оригинальной ...

0 голосов
/ 16 мая 2011

У вас есть несколько аргументов в неправильном порядке.Вы смешали имя базы данных и исходный аргумент.Попробуйте это:

DoCmd.TransferDatabase acExport, dbType, strTAbleName, acTable, dbsA, sTableNameNew, structureonly:=True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...