2010-11-09 75 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