2008-10-15 138 views
6

這可能是一個簡單的答案,但我找不到它。我有一個整數列的表,我想確保插入一行時,該列中的值大於零。我可以在代碼方面做到這一點,但認爲最好在桌面上執行它。在SQL Server 2005中,如何設置一列整數以確保值大於0?

謝謝!

我錯了,我最後的評論現在都很好。

+0

你能澄清一下編輯嗎?如果你試圖編寫一個違反約束的值,我希望系統會引發異常。 – ConcernedOfTunbridgeWells 2008-10-15 17:25:12

+0

發生了什麼使第一個不工作?您可以發佈您使用的確切約束代碼以及您嘗試插入數據時遇到的錯誤或問題嗎? – HLGEM 2008-10-15 17:40:19

回答

13

您可以對該列使用檢查約束。 IIRC這個語法看起來像:

create table foo (
    [...] 
    ,Foobar int not null check (Foobar > 0) 
    [...] 
) 

隨着海報的下面寫着(感謝康斯坦丁),你應該在創建表定義外的檢查約束,並給它一個有意義的名稱,因此很明顯它適用於哪一列。

alter table foo 
    add constraint Foobar_NonNegative 
     check (Foobar > 0) 

你可以擺脫從系統數據字典檢查約束在sys.check_constraints文:

select name 
     ,description 
    from sys.check_constraints 
where name = 'Foobar_NonNegative' 
5

創建一個數據庫約束:

ALTER TABLE Table1 ADD CONSTRAINT Constraint1 CHECK (YourCol > 0) 

你可以有相當複雜的約束,也涉及到多個列。例如:

ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL) 
+0

不要忘記「NOT NULL」。單獨檢查不會拒絕NULL。所以第二個例子中的「EndDate爲空」是多餘的。 – Constantin 2008-10-16 16:15:50

0

創建表時添加CHECK約束

CREATE TABLE Test(
     [ID] [int] NOT NULL, 
     [MyCol] [int] NOT NULL CHECK (MyCol > 1) 
) 
0

我相信你想向表格字段添加CONSTRAINT:

ALTER TABLE tableName WITH NOCHECK 
ADD CONSTRAINT constraintName CHECK (columnName > 0) 

可選的NOCHECK用於保持約束不被應用於現有數據行(可能包含無效數據)&以允許添加約束。

相關問題