IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置:首頁數(shù)據(jù)庫MSSQL → SQL Server如何保證可空字段中非空值唯一

SQL Server如何保證可空字段中非空值唯一

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

今天同學向我提了一個問題,我覺得蠻有意思,現(xiàn)記錄下來大家探討下。問題是:在一個表里面,有一個允許為空的字段,空是可以重復(fù)的,但是不為空的值需要唯一。

表結(jié)構(gòu)如下面代碼創(chuàng)建

以下為引用的內(nèi)容:

CREATE TABLE test_tb
(
    TestId int not null identity(1,1primary key,
    Caption nvarchar(100null
);
GO

解決方案1:

對于這個問題,大家的第一個想法可能是:在Caption這個字段上面加一個唯一鍵不就可以了嗎?好,我們按著這個思路做下去,先創(chuàng)建唯一索引。

以下為引用的內(nèi)容:

CREATE UNIQUE NONCLUSTERED INDEX un_test_tb 
ON test_tb(Caption)
GO

索引創(chuàng)建好了,我們來測試下效果

以下為引用的內(nèi)容:

INSERT INTO test_tb (Caption)
VALUES (null)
GO
INSERT INTO test_tb (Caption)
VALUES (null)
GO

運行之后我們會收到下面的錯誤信息:

以下為引用的內(nèi)容:

消息 2601,級別 14,狀態(tài) 1,第 1 行
不能在具有唯一索引 'un_test_tb' 的對象 'dbo.test_tb' 中插入重復(fù)鍵的行。
語句已終止。

所以該解決方案是不行的。

解決方案2:

添加約束,讓sql server在插入數(shù)據(jù)的時候,先驗證下已有數(shù)據(jù)中是否有現(xiàn)在要插入的這個值。由于這個約束不是簡單的一個運算,因此我們先創(chuàng)建一個函數(shù),然后再在約束中調(diào)用這個函數(shù)。

創(chuàng)建驗證邏輯函數(shù):

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟sql server系統(tǒng)表損壞的解決方法sql server系統(tǒng)表損壞的解決方法MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶Access、SQL Server、Oracle常見應(yīng)用的區(qū)別Access、SQL Server、Oracle常見應(yīng)用的區(qū)別

相關(guān)下載

人氣排行 如何遠程備份(還原)SQL2000數(shù)據(jù)庫SQL2000數(shù)據(jù)庫遠程導入(導出)數(shù)據(jù)配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改SQL Server 2005降級到2000的正確操作步驟修改Sql Server唯一約束教程淺談JSP JDBC來連接SQL Server 2005的方法SQL Server創(chuàng)建表語句介紹

    <noscript id="oiigw"><address id="oiigw"></address></noscript>