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

时间:2008-08-25 13:54:06

标签: sql-server ms-access dts

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

3 个答案:

答案 0 :(得分:1)

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

引用类型非常重要:

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

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

答案 1 :(得分:1)

尝试使用相同的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)

答案 2 :(得分:1)

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

如果工作,为什么不尝试从相关的Access表中执行SELECT *,如果失败则尝试catch the error