我在SQL Server 2005中有一個外鍵的表,並且我希望外鍵是唯一值或爲null。我將它設置爲一個唯一的鍵,但它不會讓我在同一個表中有多個空值。有可能做我想做的事嗎?具有空值的SQL Server 2005唯一鍵
8
A
回答
9
這是一個很長時間抱怨SQL Server的唯一約束/索引。最好的解決辦法是創建架構綁定視圖,然後把一個唯一索引的列:
Create View dbo.MyUniqueColView
With SchemaBinding
As
Select MyColToBeUnique
From MyTable
Where MyColToBeUnique Is Not Null
GO
Create Unique Clustered Index IX_MyTable_MyColToBeUnique On MyUniqueColView (MyColToBeUnique)
0
在SQL Server 2008中,您可以創建在不是空值的filtered index - 不幸的是,這是在2008年發佈了新的功能,因此在2005年,你不能夠做任何事情一樣, , 恐怕。
1
你不能在SQL Server 2005中的表級的約束強制執行這一點,但您可以創建定義SELECT Col FROM t WHERE Col IS NOT NULL
景色,然後在其上創建一個唯一的聚集索引。
0
總是一個煩惱我的。我更喜歡標準的「其他」解釋。
請參閱Creating a unique constraint that ignores nulls in SQL Server。它涵蓋了三種不同的方法。
解決方案1:過濾索引。
從其他答覆來看,這看起來很常見。我還沒有嘗試過這種方法 - 但它確實需要 SQL Server 2008的。
解決方法2:在計算列約束
我已經使用這個,和它的工作。然而,可能需要調整關係和/或添加次要非唯一覆蓋索引(一個用於唯一約束,一個用於索引覆蓋)。
解決方案3:UDF檢查約束(不推薦)
啊,TSQL的功率(閱讀:什麼別的處理)。我沒有走下這條路。
快樂編碼。
相關問題
- 1. 在SQL Server中創建具有非唯一列的外鍵
- 2. 更改SQL Server 2005中的主鍵值
- 3. 如何在SQL Server 2005中設置唯一鍵。
- 4. SQL Server的唯一值
- 5. 具有唯一值的SQL Server COUNT查詢
- 6. SQL Server 2005導入嚮導和空值
- 7. SQL Server生成唯一值
- 8. SQL Server創建具有列唯一不爲空且不爲空的表(檢查)
- 9. SQL Server:批量加載的唯一鍵
- 10. SQL Server 2005外鍵級聯
- 11. 唯一鍵與SQL Server 2008上的唯一索引
- 12. 具有唯一值的列
- 13. Sql Server唯一鍵也是索引嗎?
- 14. sql server 2005:值截斷
- 15. SQL Server CE nvarchar具有結尾空白的外鍵
- 16. SQL Server 2005 - 級聯刪除的外鍵
- 17. Sql Server 2005上的GetOleDbSchemaTable外鍵
- 18. 做複合鍵中的所有屬性具有唯一值
- 19. 帶命名空間的SQL Server 2005 XML
- 20. SQL Server 2005的性能和空白
- 21. 檢查只有一個值的SQL Server 2005
- 22. SQL - 需要複製行但具有唯一的主鍵
- 23. SQL Server唯一列ID的
- 24. 非空的唯一鍵軌
- 25. 檢查唯一鍵組合或沒有在SQL Server
- 26. SQL:選擇具有唯一值但所有列的行
- 27. SQL Server 2008,SQL Server 2005
- 28. SQL Server 2008到SQL Server 2005
- 29. 如何在SQL Server 2005中創建複合唯一約束
- 30. SQL Server 2005如何創建唯一約束?