DTS可以测试MS-Access表是否存在

时间:2020-03-05 18:42:49  来源:igfitidea点击:

我有一个Access数据库,在其中删除表,然后重新创建表。但是,我需要能够测试该表,以防万一该表被删除但未被创建(即有人在启动-roll-eyes之后立即停止了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 Server 2000

解决方案

回答

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

引用类型很重要:

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

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

回答

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

试试这个:

SELECT * FROM MSysObjects WHERE Name = 'your_table';

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

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

马丁

P.D .:"是否存在"还应检查对象类型:

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

回答

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

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