質問

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

役に立ちましたか?

解決

ポータブル?そうは思いません。

おそらく最も近いものは次のとおりです:

select * from <table>

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

他のヒント

これは、可搬性がありますが、残念ながら:

select
    count(*)
from
    information_schema.tables
where
    table_name = 'tablename'
    and table_schema = 'dbo'

これは、SQL Server、MySQL、Postgresで確実に機能します。ただし、Oracleではそれほどではありません。そのためには、Oracleデータディクショナリにアクセスする必要があります。ただし、 Oracleでinformation_schemaを作成するオープンソースプロジェクトがありますデータ辞書。絶対的な移植性が必要な場合は試してみてください。

PSスキーマはdboである必要はありませんが、最も一般的です。

私は言うだろう

select 'x' from <table_name> where 0=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

合理的に移植可能なものを次に示します。

  

TABLE制限1からnow()を選択;

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

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

テーブルが空かどうかは関係ありません。

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

すべてのDBMSには独自のメタベースがあるため、最も<!> quot; portable <!> quot;これを行う方法は、アプリケーションの呼び出し元自体を使用することです。

のようなもの
try
    execute("select top 1 * from table")
    return (true)
catch
    return false

テーブルを照会しようとしました。クエリが失敗した場合-エラーが発生した場合、それは存在しません。

それはおそらくあなたが手に入れることができる限り移植性が高いです。結果を生成する負担は、テーブル/データベースを照会するコードに依存します。

select top 1 *
from MyTable

他のエラーを防ぐため、クエリはできるだけシンプルにしてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top