2011-10-26 31 views
1

我想創建一個符合ANSI標準的方式命名的默認值,如果可能的話,在CREATE TABLE語句創建一個名爲列默認CREATE TABLE語句在ANSI SQL

如果我嘗試的限制,我想補充通常將它寫入ALTER TABLE語句中,它會失敗(至少在SQL SERVER中,儘管我強調我希望找到ANSI投訴聲明,因爲我希望它能夠處理各種Ado.NET DbConnections)。

例子:

CREATE TABLE [dbo].[MyExample] 
(
Id int NOT NULL IDENTITY (1, 1), 
Name varchar(512) NOT NULL,   
IsActive bit NOT NULL, 
CONSTRAINT PK_MyExample PRIMARY KEY CLUSTERED (Id), 
CONSTRAINT DF_MyExample_IsActive DEFAULT (1) FOR [IsActive] 
) 

錯誤:

Incorrect syntax near 'for'.

回答

4

在SQL-92標準的條款 - 這既是ISO(I =國際)和ANSI(A +美國),順便說一句 - DEFAULT是不是可以給出一個名稱約束。在SQL-92中,DEFAULT只能與列定義內聯定義,並且必須位於數據類型和NOT NULL(如果使用)之間,例如

CREATE TABLE T (c INTEGER DEFAULT 1 NOT NULL UNIQUE); 

注意你有你的小例子很多不規範的語法:

  • 方括號引用的標識符(應該是雙引號)
  • 不符合數據類型(如不正確bit空行爲)
  • 縮寫數據類型(例如int而不是INTEGER
  • IDENTITY
  • CLUSTERED
+0

謝謝,這太好了。也感謝Mimer驗證​​器鏈接。最近SQL Server太多了,我得刷:) – johnc

0

難道不是符合ANSI標準?

CREATE TABLE [dbo].[MyExample] 
(
    Id int NOT NULL IDENTITY (1, 1), 
    Name varchar(512) NOT NULL,   
    IsActive bit NOT NULL CONSTRAINT DF_MyExample_IsActive DEFAULT (1), 
    CONSTRAINT PK_MyExample PRIMARY KEY CLUSTERED (Id) 
) 
+0

我希望如此,如果得到證實,我將其標記爲一個答案 – johnc

+4

@johnc:這是不是ISO/IEC/ANSI SQL-92標準。這可以被驗證,例如使用[Mimer SQL-92 Validator](http://developer.mimer.com/validator/parser92/index.tml)。 – onedaywhen

相關問題