我有一个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

===============>>#1 票数:1 已采纳

我不确定是否可以从DTS包中查询Access数据库中的系统对象表。

如果这不起作用 ,为什么不尝试从有问题的Access表中执行SELECT *,然后失败时捕获错误呢?

===============>>#2 票数:1

Microsoft Access有一个称为MSysObjects的系统表,其中包含所有数据库对象(包括表)的列表。 表对象具有类型1、4和6。

引用类型很重要:

...其中Name ='TableName'并输入(1,4,6)

否则,返回的内容可能是表以外的某个对象。

===============>>#3 票数:1

尝试使用相同的T-SQL,但是在MS ACCESS中,sys对象表称为:MSysObjects。

尝试这个:

SELECT * FROM MSysObjects WHERE Name = 'your_table';

看看它是否可以从那里工作。

如果转到工具->选项->视图(一个选项卡)->并选中“隐藏对象”,“系统对象”,则可以查看这些表。 这样您就可以看到两者。 如果打开表,则应该看到表名,查询等。请勿手动更改此设置,否则数据库可能会出现恐慌:)

马丁

PD:如果存在,还应检查对象类型:

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

  ask by Keng translate from so

未解决问题?本站智能推荐: