2011-07-08 64 views
1

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

我有一个需要写一些Delphi代码,也就是说,当表存在这样做要不然这...

回答

2

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

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

非SQL的解决办法是使用AdsCheckExistence API。

+0

谢谢!任何想法,如果你可以返回0/1或'真/假'? – Jon

+0

在ADS 10.x中,你可以选择一个过程,像这样: SELECT * FROM(EXECUTE PROCEDURE sp_GetTables(NULL,NULL,NULL, '表'))一个WHERE TABLE_NAME = 'TEST.ADT' 我会那么只需检查结果记录计数,1为TRUE 0为FALSE。 –

+0

将表名称传递到sp_GetTables中稍微简单一些: EXECUTE PROCEDURE sp_GetTables(NULL,NULL,'TEST.ADT','TABLE') –

0

我喜欢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; 
0

Delphi代码:

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

端;