Может ли DTS тест на наличие таблицы MS-Access

У меня есть база данных Access, в которой я удаляю таблицу, а затем заново создаю таблицу. Тем не менее, мне нужно иметь возможность проверить таблицу в случае, если таблица удаляется, но не создается (то есть, когда кто-то останавливает пакет DTS сразу после запуска -roll-eyes-). Если бы я делал это в базе данных 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 Server 2000

25.08.2008 13:54:05
3 ОТВЕТА
РЕШЕНИЕ

Я не уверен, что вы можете запросить таблицу системных объектов в базе данных Access из пакета DTS.

Если это не сработает, то почему бы просто не попробовать выполнить SELECT * из соответствующей таблицы Access, а затем перехватить ошибку, если она не удалась?

1
2.10.2008 15:34:39

В Microsoft Access есть системная таблица MSysObjects, которая содержит список всех объектов базы данных, включая таблицы. Объекты таблицы имеют Тип 1, 4 и 6.

Важно сослаться на тип:

... Где Name = 'TableName' и введите In (1,4,6)

В противном случае возвращаемым может быть какой-то объект, отличный от таблицы.

1
25.08.2008 14:08:56

Попробуйте тот же T-SQL, но в MS ACCESS таблица объектов sys называется: MSysObjects.

Попробуй это:

SELECT * FROM MSysObjects WHERE Name = 'your_table';

и посмотрим, работает ли он оттуда.

Вы можете взглянуть на эти таблицы, если зайдите в Сервис -> Параметры -> Вид (вкладка) -> и выберите Скрытые объекты, Системные объекты. Таким образом, вы можете увидеть оба. Если вы откроете таблицу, вы должны увидеть имена таблиц, запросы и т. Д. Не изменяйте это вручную, иначе БД может запаниковать :)

Мартин.

PD: Your If Exists также должен проверить тип объекта:

IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[Your_Table_Name]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
1
25.08.2008 14:05:30