Может ли DTS проверить наличие таблицы MS-Access?
-
09-06-2019 - |
Вопрос
У меня есть база данных Access, в которой я удаляю таблицу, а затем создаю ее заново.Однако мне нужно иметь возможность проверить таблицу на случай, если таблица будет удалена, но не создана (т.когда кто-то останавливает пакет DTS сразу после его запуска - закатывает глаза-).Если бы я делал это в базе данных SQL, я бы просто сделал:
IF (EXISTS (SELECT * FROM sysobjects WHERE name = 'Table-Name-to-look-for'))
BEGIN
drop table 'Table-Name-to-look-for'
END
Но как мне это сделать для базы данных Access?
Дополнительный ответ:Есть ли способ заставить пакет DTS игнорировать ошибку и просто перейти к следующему шагу, а не проверять, существует ли она?
SQL-сервер 2000
Решение
Я не уверен, можете ли вы запросить таблицу системных объектов в базе данных Access из пакета DTS.
Если это не делает работает, почему бы просто не попробовать выполнить SELECT * из рассматриваемой таблицы Access, а затем поймать ошибку если он потерпит неудачу?
Другие советы
Попробуйте тот же T-SQL, но в MS ACCESS таблица sys-объектов называется:MSysObjects.
Попробуй это:
SELECT * FROM MSysObjects WHERE Name = 'your_table';
и посмотрите, работает ли это оттуда.
Вы можете просмотреть эти таблицы, если зайдете в Инструменты -> Параметры -> Вид (вкладка) -> и отметите «Скрытые объекты», «Системные объекты».Так что вы можете увидеть оба.Если вы откроете таблицу, вы должны увидеть имена таблиц, запросы и т. д.Не меняйте это вручную, иначе БД может запаниковать :)
Мартин.
П.Д.:Ваш If Exists также должен проверить тип объекта:
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[Your_Table_Name]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
В Microsoft Access есть системная таблица MSysObjects, содержащая список всех объектов базы данных, включая таблицы.Табличные объекты имеют Тип 1, 4 и 6.
Важно указать тип:
...Где Name='TableName' и введите (1,4,6)
В противном случае возвращаемый объект может быть не таблицей, а каким-либо объектом.