使用SQL模拟表创建

时间:2009-07-31 09:14:12

标签: sql database ddl

是否有使用SQL模拟数据库中表创建的标准方法?我不希望创建表,只需检查是否可以创建表。 一种方法是创建它然后再次删除它。 还有别的吗?

5 个答案:

答案 0 :(得分:4)

大多数主要服务器都支持事务性DDL,因此您可以按照以下方式执行操作:

begin transaction

create table Foo ...

rollback transaction

理论上,如果出现错误,应将其报告回客户端,但不会完全创建表格。

答案 1 :(得分:2)

取决于您感兴趣的SQL DBMS。例如,Postgres支持事务性DDL,以下内容将起作用:

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

答案 2 :(得分:0)

如果您使用的是MySQL,则可以使用临时存储引擎创建它,例如MEMORY

答案 3 :(得分:0)

真的,你必须实际创建它以确保一切正常。

在执行时间之前,不会检查外键引用,用作默认值或检查约束的函数或计算列中的函数。

答案 4 :(得分:0)

一种基本方法(SQL Server)是使用“SET FMTONLY ON”。

用于检查语句是否有效,但不会告诉您所有内容(例如,如果表已存在)。

这将成功:

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

这不会:

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

这种方法对于SELECT语句可能更有用,这是我过去使用它的方法。它实际上并不执行该语句,而是返回元数据。