2015-01-13 85 views
1

我有以下SQL來創建表,但第一個CONSTRAINT中的「DEFAULT」給我一個錯誤:「默認約束只能存在於CREATE或ALTER TABLE中的列級別聲明。」默認約束導致錯誤

我以前從未使用過默認設置,所以我已經通過網絡調查進行了一些調查,但沒有任何信息幫助我解決錯誤,甚至還沒有真正向我解釋過錯誤。

CREATE TABLE [RuleEngine].[NCCIImportHistory](
       [NCCIImportHistoryID] [int] IDENTITY(1,1) NOT NULL, 
       [StartTime] [datetimeoffset](7) NOT NULL, 
       [EndTime] [datetimeoffset](7) NOT NULL, 
       [CreatedOn] [datetimeoffset](7) NOT NULL, 
       [CreatedBy_UserID] [int] NOT NULL, 
CONSTRAINT [DF_NCCIImportHistory_CreatedOn] DEFAULT (getutcdate()) FOR [CreatedOn], 
CONSTRAINT [FK_NCCIImportHistory_User_CreatedBy] FOREIGN KEY([CreatedBy_UserID]) REFERENCES [Security].[User] ([UserID]), 
CONSTRAINT [PK_NCCIImportHistoryID] PRIMARY KEY CLUSTERED ([NCCIImportHistoryID] ASC) 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]) ON [PRIMARY] 
+0

表,然後限制請指定dbms。 (這看起來不像ANSI/ISO SQL ...)順便說一句,我想你做一些像列名數據類型默認值... – jarlh

+0

對不起。這是MS SQL服務器 – AtlasBowler

回答

2

您沒有指定使用的數據庫,但基於語法,我認爲它是MS SQL Server。如果是這樣,你可以作爲列定義的一部分行內添加約束,而不是像這樣:

[CreatedOn] [datetimeoffset](7) NOT NULL CONSTRAINT [DF_NCCIImportHistory_CreatedOn] DEFAULT (getutcdate()), 
+1

謝謝!這工作!只要StackOverflow允許,我會盡快接受您的答案。 – AtlasBowler

0

試試這個

CREATE TABLE [RuleEngine].[NCCIImportHistory] 
    (
     [NCCIImportHistoryID] [INT] IDENTITY(1, 1) 
            NOT NULL , 
     [StartTime] [DATETIMEOFFSET](7) NOT NULL , 
     [EndTime] [DATETIMEOFFSET](7) NOT NULL , 
     [CreatedOn] [DATETIMEOFFSET](7) NOT NULL CONSTRAINT [DF_NCCIImportHistory_CreatedOn] DEFAULT (GETUTCDATE()), 
     [CreatedBy_UserID] [INT] NOT NULL , 
     CONSTRAINT [FK_NCCIImportHistory_User_CreatedBy] FOREIGN KEY ([CreatedBy_UserID]) REFERENCES [Security].[User] ([UserID]) , 
     CONSTRAINT [PK_NCCIImportHistoryID] PRIMARY KEY CLUSTERED 
     ([NCCIImportHistoryID] ASC) 

     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
       IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
       ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
    ) 
ON [PRIMARY] 

或先創建這樣

CREATE TABLE [RuleEngine].[NCCIImportHistory] 
    (
     [NCCIImportHistoryID] [INT] IDENTITY(1, 1) NOT NULL , 
     [StartTime] [DATETIMEOFFSET](7) NOT NULL , 
     [EndTime] [DATETIMEOFFSET](7) NOT NULL , 
     [CreatedOn] [DATETIMEOFFSET](7) NOT NULL, 
     [CreatedBy_UserID] [INT] NOT NULL 
    ) 
ON [PRIMARY] 
GO 


ALTER TABLE [RuleEngine].[NCCIImportHistory] ADD CONSTRAINT [DF_NCCIImportHistory_CreatedOn] DEFAULT(GETUTCDATE()) FOR [CreatedOn] 
GO 

ALTER TABLE [RuleEngine].[NCCIImportHistory] ADD CONSTRAINT [FK_NCCIImportHistory_User_CreatedBy] FOREIGN KEY ([CreatedBy_UserID]) REFERENCES [Security].[User] ([UserID]) 
GO 

ALTER TABLE [RuleEngine].[NCCIImportHistory] ADD CONSTRAINT [PK_NCCIImportHistoryID] PRIMARY KEY CLUSTERED([NCCIImportHistoryID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
       IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
       ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
GO 
+0

我原本在那裏有ALTER,但我的導師建議把它們取出來,這就是爲什麼我按照我在問題中發佈的方式做到了這一點。雖然謝謝! – AtlasBowler