【问题标题】:Can DTS Test for Presence of MS-Access Table可以 DTS 测试是否存在 MS-Access 表
【发布时间】:2008-08-25 13:54:05
【问题描述】:

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

【问题讨论】:

    标签: sql-server ms-access dts


    【解决方案1】:

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

    如果 不起作用,为什么不尝试从有问题的 Access 表中执行 SELECT *,如果失败则尝试 catch the error

    【讨论】:

      【解决方案2】:

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

      试试这个:

      SELECT * FROM MSysObjects WHERE Name = 'your_table';
      

      看看它是否从那里工作。

      如果您转到工具 -> 选项 -> 视图(选项卡)-> 并检查隐藏对象,系统对象,您可以查看这些表。所以你可以看到两者。如果您打开表,您应该会看到您的表名、查询等。不要手动更改,否则数据库可能会崩溃 :)

      马丁。

      P.D.:您的 If Exists 还应该检查对象类型:

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

      【讨论】:

        【解决方案3】:

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

        引用类型很重要:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-19
          • 2012-01-16
          • 1970-01-01
          相关资源
          最近更新 更多