检测表是否存在

时间:2011-07-08 12:00:21

标签: delphi sybase advantage-database-server

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

我需要编写一些Delphi代码来说明,如果表存在,请执行此操作...

4 个答案:

答案 0 :(得分:2)

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

EXECUTE PROCEDURE sp_GetTables(NULL,NULL,NULL,'TABLE')

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我喜欢彼得的答案,但根据你需要做什么,你可能正在寻找一个尝试,捕捉,最后的陈述。

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;

答案 3 :(得分:0)

德尔福代码:

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

端;