2010-11-09 87 views

回答

4

否SQL Server 2008不支持此语法。

+1

-1事实上正确但没有帮助:有替代方案可以实现相同的结果。 – gbn 2010-11-09 06:04:08

+3

@gbn:实际上,您的选择不会达到相同的结果。此外,OP指定他们只是想要一个直接的答案。 – onedaywhen 2010-11-09 08:15:38

3

不,您会使用CHECK constraintTRIGGER来代替,具体取决于复杂程度。

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

但这里的问题是'CREATE ASSERTION'处于模式级别,SQL Server在该级别没有任何东西。触发器是程序化的,不能与SQL-92基于集合的范例相媲美。 – onedaywhen 2010-11-09 08:20:13

+0

@onedaywhen:它取决于OP真正想要达到的目标,不是吗?通过CHECK或TRIGGER可以解决CREATE ASSERTION的问题。问题不是“不”,但我们如何帮助OP。除非你在这里取得聪明的分数。 – gbn 2010-11-09 17:57:13

+0

“CREATE ASSERTION可能过量,可通过CHECK或TRIGGER解决。” - 你能发表一个关于这个断言的证据吗(我仔细选择了我的话)? – onedaywhen 2010-11-10 09:54:21

4

的SQL Server 2008不支持CREATE ASSERTION

实际上,目前没有SQL产品正确支持CREATE ASSERTION。 Sybase SQL Anywhere支持它,但据报道存在问题,允许有时会违反约束条件。 Rdb确实支持它,当它被DEC照顾时(谁显然在SQL标准的早期有影响力,可能是为什么CREATE ASSERTION是首先在标准中的原因),但该产品没有更多。

STOP PRESS:according to their documentation,HyperSQL(HSQLDB)支持断言(尽管我还在想他们为什么不在their list of features上大喊)。

+2

我认为hsql文档有缺陷。我只是尝试了标准的SQL语法(由Mimer在线验证),并且hsql给了我:意外的标记:声明中的ASSERTION [CREATE ASSERTION] - 这是Fedora,HSQL数据库引擎v。1.8.1,SqlTool v。333。 (SqlFile处理器诉354) – pestophagous 2013-02-22 05:12:39

+0

@queque:耻辱:( – onedaywhen 2013-02-22 08:56:46

相关问题