【问题标题】:Does SQL Server 2008 support the CREATE ASSERTION syntax?SQL Server 2008 是否支持 CREATE ASSERTION 语法?
【发布时间】:2010-11-09 02:43:57
【问题描述】:

SQL Server 2008 是否支持CREATE ASSERTION 语法?

我无法找到一个直接的答案。

【问题讨论】:

    标签: sql sql-server-2008 assertion


    【解决方案1】:

    没有 SQL Server 2008 不支持这种语法。

    【讨论】:

    • -1 事实上正确但没有帮助:有其他方法可以达到相同的结果。
    • @gbn:实际上,您的替代方案并没有达到相同的结果。此外,OP 指定他们只想要一个直接的答案。
    【解决方案2】:

    不,您可以改用CHECK constraintTRIGGER,具体取决于复杂性。

    • CHECK 约束:仅在行级别
    • TRIGGER:跨行或使用其他表

    【讨论】:

    • 但这里的问题是CREATE ASSERTION 处于架构级别,而 SQL Server 在该级别没有任何内容。触发器是程序性的,无法与 SQL-92 的基于集合的范例相提并论。
    • @onedaywhen:这确实取决于 OP 真正想要实现的目标,不是吗? CREATE ASSERTION 在可以通过 CHECK 或 TRIGGER 解决的情况下可能有点过分。问题不是“不”,而是我们如何帮助 OP。除非你来这里是为了获得高分。
    • "CREATE ASSERTION 在可以通过 CHECK 或 TRIGGER 解决的情况下可能有点矫枉过正。" -- 你能发表这个断言的证明(我仔细选择了我的话)吗?
    • “它确实取决于 OP 真正想要实现的目标,不是吗?” -- 他们说他们只是想要一个直接的答案,是吗?
    【解决方案3】:

    SQL Server 2008 不支持CREATE ASSERTION

    事实上,目前的 SQL 产品都没有正确支持CREATE ASSERTION。 Sybase SQL Anywhere 支持它,但据报道有时会出现违反约束的问题。 Rdb 在 DEC 的照料下确实支持它(他们显然在 SQL 标准的早期有影响力,这可能是 CREATE ASSERTION 首先成为标准的原因),但该产品已不复存在。

    停止新闻:according to their documentation,HyperSQL (HSQLDB) 支持断言(尽管我想知道他们为什么不在their list of features 上大喊大叫)。

    【讨论】:

    • 我认为 hsql 文档有缺陷。我刚刚尝试了标准 SQL 语法(由 Mimer 在线验证),hsql 给了我:Unexpected token: ASSERTION in statement [CREATE ASSERTION] -- 这是在 Fedora、HSQL Database Engine v. 1.8.1、SqlTool v. 333 上。 (SqlFile 处理器 v. 354)
    【解决方案4】:

    我最近在寻找这个,发现http://hsqldb.org/doc/guide/databaseobjects-chapt.html#dbc_assertions 说“一个断言是一个顶级模式对象。它由一个不能为假的(可能是未知的)组成。HyperSQL 确实尚不支持断言。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多