仅当 ANSI sql 不存在表时才创建表

Posted

技术标签:

【中文标题】仅当 ANSI sql 不存在表时才创建表【英文标题】:creating a table only if it's not existing with ANSI sql 【发布时间】:2011-09-03 12:47:21 【问题描述】:

我正在尝试仅在 SQL 表不存在时动态创建它。我在互联网上看到了很多解决方案,但它们通常依赖于特定的数据库,而我正在尝试找到最通用的解决方案。

我一直在考虑始终运行 CREATE 命令,然后假设如果它失败则表存在并且我可以开始向其中插入数据。我看不出这种推理有任何缺陷(不包括性能问题),但我可能错了。

这是一种可接受的方法吗?

您能否推荐其他独立于数据库或使用所有 RDBMS 都接受的 ANSI SQL 的方法?

【问题讨论】:

尝试失败可能是真正便携的最安全的选择。但是,如果表已经存在,它假定所有数据库都会产生失败错误条件。我想不出任何不会的数据库,但你永远不知道...... @Alireza 我只需要编写一个创建和插入查询,我不想创建一个包含很多案例的整个数据库类。 【参考方案1】:

如果有一个表 - 比如说 - EMP,这是否真的意味着它与您期望的 EMP 相同?

要么查询表结构的适当数据字典,要么用大量错误检查和条件逻辑填充您的代码...

【讨论】:

这只是 2 个查询,所以我不必检查太多【参考方案2】:

怎么样:

create table if not exists

【讨论】:

【参考方案3】:

INFORMATION_SCHEMA 是 ANSI SQL 标准的一部分,因此您应该能够:

IF NOT EXISTS(SELECT NULL FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'YourTable')
    CREATE TABLE...

【讨论】:

我可能错了,但我认为 Oracle 没有。 (它确实有目录表。):-) @Denis:我相信你是对的,但 OP 要求使用 ANSI SQL 的解决方案。 他们编辑了我的问题,但实际上我只是在寻找适合每个主要数据库的东西 IF 似乎不是 ANSI。

以上是关于仅当 ANSI sql 不存在表时才创建表的主要内容,如果未能解决你的问题,请参考以下文章

仅当行不存在时才插入 SQL

仅当 Access 2007 中不存在时才添加记录

仅当它不存在时才在 SQLite 中创建表

SQL SERVER 建表时先判断表有没有存在

用sql server 建了一个表,可是查询此表时怎莫说不存在呢?

仅当表中不存在两个 id 的组合时才将值插入表中