2011-07-08 182 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

端;