【问题标题】:Simulate a table creation with SQL使用 SQL 模拟表创建
【发布时间】:2009-07-31 09:14:11
【问题描述】:

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

【问题讨论】:

  • 在什么情况下你希望表不能创建?当已经有同名的表时?什么时候字段太多? DDL 中何时出现语法错误?只是不确定您是否有已知的可能错误,或者您正在尝试捕获任何潜在错误。
  • 任何潜在的错误。安东的建议效果很好。谢谢大家。

标签: sql database ddl


【解决方案1】:

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

begin transaction

create table Foo ...

rollback transaction

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          一种基本方法(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 语句更有用,这是我过去使用的方法。它实际上并不执行语句,而是返回元数据。

          【讨论】:

            猜你喜欢
            • 2011-01-20
            • 2013-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-02
            • 1970-01-01
            • 2013-10-03
            • 1970-01-01
            相关资源
            最近更新 更多