2013-12-05 5 views
1

Я хочу установить ограничение даты в моей таблице (я использую сервер sql). Я хочу, чтобы дата в одном из моих столбцов была ниже текущей даты и времени (я знаю, это звучит странно, но это задание, поэтому у меня нет выбора). Я пытался сделать это таким образом:Оператор INSERT противоречил ограничению

ALTER TABLE sales ADD CONSTRAINT d CHECK (Date > CURRENT_TIMESTAMP); 

, но позже при вставке DEFAULT в дату колонке я получаю следующее сообщение об ошибке:

The INSERT statement conflicted with the CHECK constraint "d". 
The conflict occurred in database "Newsagents", table "dbo.Sales", column 'Date'. 

Это говорит таблица:

CREATE TABLE Sales (
ID INT IDENTITY(1,1) NOT NULL , 
ClientID INT REFERENCES Client(ClientID), 
ProductNumber CHAR(10) REFERENCES Product(ProductNumber), 
Quantity INT NOT NULL, 
Price FLOAT NOT NULL , 
Date TIMESTAMP NOT NULL, 
PRIMARY KEY (ID) 

и это как я вставляю свои данные в столбец Продавца и получаю конфликт ограничений:

DECLARE @counter INT 
DECLARE @quantity int 
DECLARE @prodNum varchar(20) 
SET @counter = 0 
WHILE @counter < 10 
BEGIN 
SET @quantity = (select FLOOR(RAND()*100)) 
SET @prodNum = (select TOP 1 ProductNumber from Product Order by NEWID()) 

insert into Sales (ClientID, ProductNumber, Quantity, Price, Date) 
values(
(select TOP 1 ClientID from Client Order by NEWID()), 
(select @prodNum), 
(select @quantity), 
((select @quantity)*(select TOP 1 Price from Product where ProductNumber = @prodNum)), 
DEFAULT 
) 
SET @counter = @counter + 1 
END 

Есть ли другой способ сделать это? Или я делаю что-то неправильно?

ответ

0
ALTER TABLE sales ADD CONSTRAINT d CHECK (Date > GETDATE()); 

изменить столбец Дата в DateTime

+0

Уже попробовал это, и это дает ту же ошибку (я знаю, что TIMESTAMP в My SQL отличается от такового в SQL Server). Однако возможно ли удовлетворить такое ограничение? –

+0

@BesSa изменить тип столбца DATETIME – giammin

+0

Да, я изменил его: «данных даты и времени NOT NULL DEFAULT GETDATE()» Однако я все еще получаю ошибку, то единственное, что помогает меняется ограничение от (дата> GETDATE()) - (Date> = GETDATE()) –

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