0

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

4

5 回答 5

4

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

begin transaction

create table Foo ...

rollback transaction

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

于 2009-07-31T09:16:46.863 回答
2

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

START TRANSACTION;
CREATE TABLE ... ();
<check for error here>
ROLLBACK;
于 2009-07-31T09:16:28.283 回答
0

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

于 2009-07-31T09:17:40.060 回答
0

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

外键引用、用作默认或检查约束或计算列中的函数直到执行时才被检查。

于 2009-07-31T09:18:13.693 回答
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 语句更有用,这是我过去使用的方法。它实际上并不执行语句,而是返回元数据。

于 2009-07-31T09:24:01.170 回答