2015-01-13 2 views
1

У меня есть следующий SQL для создания таблицы, но «DEFAULT» в первом CONSTRAINT дает мне ошибку: «Ограничение по умолчанию может существовать только на уровне столбца в CREATE или ALTER TABLE заявление."Default Constraint вызывает ошибку

Я никогда не пользовался дефолтом раньше, поэтому я изучил это с помощью интернет-исследований, но ничто не помогло мне решить эту проблему еще или даже действительно объяснил это мне.

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 ...) Кстати, я думаю, вы делаете что-то вроде типа данных DEFAULT типа column-name ... – jarlh

+0

Извините. Это MS SQL Server – 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

У меня изначально были АЛЬТЕРЫ, но мой наставник рекомендовал их вынимать, поэтому я сделал это так, как писал в этом вопросе. Спасибо хоть! – AtlasBowler

Смежные вопросы