DTS 能否测试 MS-Access 表是否存在
-
09-06-2019 - |
题
我有一个 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
解决方案
我不确定您是否可以从 DTS 包查询 Access 数据库中的系统对象表。
如果说 不 工作,为什么不尝试从有问题的 Access 表中执行 SELECT *,然后 捕获错误 如果失败了?
其他提示
尝试相同的 T-SQL,但在 MS ACCESS 中调用 sys 对象表:MSysObjects。
尝试这个:
SELECT * FROM MSysObjects WHERE Name = 'your_table';
并从那里看看它是否有效。
如果您转到“工具”->“选项”->“查看”(选项卡)-> 并选中“隐藏对象”、“系统对象”,则可以查看这些表。所以你可以看到两者。如果打开表,您应该会看到表名称、查询等。不要手动更改此设置,否则数据库可能会出现恐慌:)
马丁.
PD:您的 If Exists 还应该检查对象类型:
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[Your_Table_Name]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
Microsoft Access 有一个名为 MSysObjects 的系统表,其中包含所有数据库对象(包括表)的列表。表对象有类型 1、4 和 6。
引用类型很重要:
...其中 Name='TableName' 并输入 (1,4,6)
否则,返回的可能是表以外的某个对象。
不隶属于 StackOverflow