【问题标题】:Detect if a table exists检测表是否存在
【发布时间】:2011-07-08 12:00:21
【问题描述】:

在 SQL Server 中,您可以编写 SQL 来检查表是否存在。我怎样才能为 ADS 做到这一点?

我需要编写一些 Delphi 代码来说明表是否存在,否则执行此操作...

【问题讨论】:

    标签: delphi sybase advantage-database-server


    【解决方案1】:

    系统过程sp_GetTables可以告诉你在你连接的目录中存在哪些表:

    执行过程 sp_GetTables(NULL, NULL, NULL, 'TABLE')

    非 SQL 解决方案是使用 AdsCheckExistence API。

    【讨论】:

    • 谢谢!如果您可以返回 0/1 或 'TRUE/FALSE' 有什么想法吗?
    • 在 ADS 10.x 中,您可以 SELECT FROM 像这样的过程:SELECT * FROM (EXECUTE PROCEDURE sp_GetTables(NULL, NULL, NULL, 'table')) a WHERE TABLE_NAME = 'TEST.ADT'然后我会检查结果记录数,1 是 TRUE 0 是 FALSE。
    • 将表名传递给 sp_GetTables 有点简单:EXECUTE PROCEDURE sp_GetTables(NULL, NULL, 'TEST.ADT', 'TABLE')
    【解决方案2】:

    我不是ADS用户,所以无法详细回答。

    http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/index.html

    这是 system.tables 视图,其中包含有关表的信息。 我想你也可以编写 SQL 查询来检查一个表。

    【讨论】:

    • 谢谢。刚看了一下,似乎 system.tables 是我没有的数据字典的一部分。
    【解决方案3】:

    我喜欢 Peter 的回答,但根据您需要做什么,您可能正在寻找 TRY、CATCH、FINALLY 语句。

    TRY
       // Try to do something with the table
       select top 1 'file exists' from "non_existing_table";
    
    CATCH ADS_SCRIPT_EXCEPTION 
    
       // If a "7041 - File does not exist" error ocurrs
       IF __errcode = 7041 THEN 
          // Do something else
          select 'file does not exist' from system.iota; 
    
       ELSE 
          // re-raise the other exception
          RAISE; 
    
       END IF; 
    END TRY;
    

    【讨论】:

      【解决方案4】:

      德尔福代码:

      function TableExists(AConnection: TADOConnection; const TableName: string): boolean;
      var
      R: _Recordset;
      begin
      if AConnection.Connected then
      try
        R := AConnection.Execute('Select case when OBJECT_ID(''' + TableName + ''',''U'') > 0 then 1 else 0 end as [Result]', cmdText, []);
        if R.RecordCount > 0 then
         Result := (R.Fields.Items['Result'].Value = 1);
      
      except on E:exception do Result := false;
      end;
      

      这个简单的函数使用现有的 TADOConnection

      结束;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        • 2012-06-28
        相关资源
        最近更新 更多