是否有使用SQL模拟数据库中表创建的标准方法?我不希望创建表,只需检查是否可以创建表。 一种方法是创建它然后再次删除它。 还有别的吗?
答案 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语句可能更有用,这是我过去使用它的方法。它实际上并不执行该语句,而是返回元数据。