程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 確保所有的非空(Non-NULL)值都是唯一的

確保所有的非空(Non-NULL)值都是唯一的

編輯:關於MYSQL數據庫

問:我的SQL Server表的一列允許NULL值。我希望在其值為非NULL時,該列是唯一的。怎樣才能以編程的方式實現這一行為?如果在該列上設置一個UNIQUE 約束,我只能包含一個值為NULL的記錄。我正在使用觸發器實現這一約束,您可以推薦一個更簡單的方法以保證所有的非NULL值唯一嗎?

答:SQL Server沒有實現非NULL值唯一性的內建機制,因此您需要通過自定義的CHECK約束來實現這一機制。例如,以下一段編碼實現了您所需要的功能:

USE tempdb
CREATE table t1 (c1 int NULL, c2 char(5) NULL)
CREATE trigger mytrigger on t1 for insert, update as
BEGIN
IF (select max(cnt) from (select count(i.c1)
as cnt from t1, inserted i where t1.c1=i.c1 group
by i.c1) x) > 1
ROLLBACK TRAN
END

在SQL Server 2000中,您還可以使用INSTEAD OF觸發器來實現這一功能。有關INSTEAD OF觸發器的詳細信息,請參閱以下文章。如需訪問這些文章,請訪問SQL Server 雜志網站,在InstantDoc框中輸入InstantDoc號,然後點擊Go。相關文章如下:

Tricks with INSTEAD OF Triggers; InstantDoc number 15828
INSTEAD OF Triggers on VIEws; InstantDoc number 15791
INSTEAD OF Triggers; InstantDoc number 15524

—SQL Server MVPs

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved