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 *,然后在失败时捕获错误呢?