5

データベーステーブルが既に存在するかどうかを判断するポータブルな方法はありますか?

4

7 に答える 7

4

ポータブル?私はそうは思わない。

おそらくあなたが得ることができる最も近いものは次のとおりです:

select * from <table>

テーブルが存在しない場合、これはエラーを返します。

于 2009-08-04T14:48:07.700 に答える
2

私は言うだろう

select 'x' from <table_name> where 0=1;

欠点は、エラーが発生した場合、本当の原因が何なのかはっきりとわからないことです。テーブルがないか、接続エラーなどの可能性があります。エラーメッセージを解析できますが、間違いなく移植できません。

于 2012-07-12T13:01:16.170 に答える
1

適度に移植可能なものを次に示します。

table limit 1 から now() を選択します。

特定の列の知識に依存しません。

count(*) で発生することがあるオーバーヘッドは発生しません。

テーブルが空かどうかは問題ではありません。

テーブルが存在しない場合は失敗します。

于 2012-02-04T09:49:36.757 に答える
1

INFORMATION_SCHEMA ビューは ANSI 標準であるため、最も移植性の高いオプションです。where句にスキーマとテーブルタイプを追加することを忘れないでください...

if exists(select  *
          from    information_schema.tables
          where   table_schema = 'dbo'
                  and table_name = 'MyTable'
                  and table_type = 'basetable')
begin
     -- your code here
end
于 2009-08-04T14:51:51.920 に答える
0

すべての DBMS には独自のメタベースがあるため、これを行う最も "移植性の高い" 方法は、アプリケーションの呼び出し元自体を使用することだと思います。何かのようなもの

try
    execute("select top 1 * from table")
    return (true)
catch
    return false
于 2009-08-04T14:48:19.913 に答える
0

テーブルのクエリを試みます。クエリが失敗した場合 -- エラーが表示されます。クエリは存在しません。

それはおそらくあなたが得ることができるのと同じくらいポータブルです。結果を生成する負荷は、テーブル/データベースをクエリするコードに依存します。

select top 1 *
from MyTable

他のエラーが発生するのを防ぐために、クエリはできるだけ単純にしてください。

于 2009-08-04T14:48:41.863 に答える