2009-07-31 9 views
0

SQLを使用してデータベース内のテーブル作成をシミュレートする標準的な方法はありますか?テーブルを作成する必要はありません。作成できるかどうかを確認するだけです。 これを作成してもう一度削除する方法もあります。 他の方法はありますか?SQLを使用したテーブル作成のシミュレーション

+0

どのような状況でテーブルを作成できないと思われますか?すでに同じ名前のテーブルがある場合は?あまりにも多くのフィールドがある場合? DDLに構文エラーがある場合既知の可能性のあるエラーがあるか、潜在的なエラーをトラップしようとしているかは不明です。 –

+0

潜在的なエラー。 Antonの提案はうまくいく。皆さん、ありがとうございました。 – Zardoz

答えて

4

ほとんどの主要なサーバは、トランザクションのDDLをサポートしています。

begin transaction 

create table Foo ... 

rollback transaction 

理論上、エラーの場合はクライアントに報告する必要がありますが、テーブルは完全には作成されません。

2

はあなたが興味のあるSQL DBMSに依存例えばPostgresはトランザクションのDDLをサポートし、次のように動作します:あなたはこれらの線に沿って何かを行うことができますので

START TRANSACTION; 
CREATE TABLE ...(); 
<check for error here> 
ROLLBACK; 
0

MySQLを使用している場合は、MEMORYのような一時的なストレージエンジンを使用して作成できます。

0

本当に、すべてを確認するために実際に作成する必要があります。

デフォルトまたはチェック制約として、または計算列内で使用される外部キー参照は、実行時までチェックされません。

0

SET FMTONLY ON」を使用する基本的な方法(SQL Server)が1つあります。

ステートメントのチェックには有効ですが、すべてのことを示すわけではありません(たとえば、テーブルが既に存在する場合など)。

これは成功します:

SET FMTONLY ON 
EXECUTE ('CREATE TABLE SomeTable(SomeField INTEGER)') 
SET FMTONLY OFF 

これはしません:

SET FMTONLY ON 
EXECUTE ('CREATE TABLE SomeTable(dodgysyntax)') 
SET FMTONLY OFF 

このアプローチは、おそらく私が過去にそれを使用してきたものであるSELECT文のためのより有用です。実際にはステートメントは実行されませんが、メタデータが返されます。

関連する問題