我有一個Description
字段的表。我想確保沒有兩行具有相同的「描述」,但我無法將描述寫入我的標識列(我的標識列是一個int)。如何強制SQL Server 2008 R2中的整個表是唯一的列?
將Description
設置爲第二個主鍵(除了我的ID已經是主鍵)是否安全?
我有一個Description
字段的表。我想確保沒有兩行具有相同的「描述」,但我無法將描述寫入我的標識列(我的標識列是一個int)。如何強制SQL Server 2008 R2中的整個表是唯一的列?
將Description
設置爲第二個主鍵(除了我的ID已經是主鍵)是否安全?
唯一索引添加到說明列。
使用Sql Server Management Studio在表格上單擊鼠標右鍵並選擇「設計」。然後右鍵點擊一列並選擇「索引/鍵」。您將與添加在底部下面的窗口
點擊提示左,然後指定你的索引屬性。如果你想使用一個DDL腳本,然後使用類似這樣
CREATE UNIQUE NONCLUSTERED INDEX [IX_INDEXNAME] ON [dbo].[TABLENAME]
(
[Description] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
沒有這樣的事情作爲'次要主鍵'。每個表有一個主鍵。
在Description
列創建UNIQUE constraint(極不尋常的事,BTW。例如,它是更常見的對Product Name
創建唯一索引,而不是Product description
),或者如果你有空值在Description
列上創建一個Filtered index(SQL Server 2008中起)
ALTER TABLE dbo.yourTable
ADD CONSTRAINT UQ_yourTable_Description UNIQUE ([Description]);
還有另一種方法,如果你喜歡做這與SSMS GUI:
我與名MyUniqueColumn
取代了Description
列爲了這個例子。
ADD CONSTRAINT
SQL腳本執行。我無法查看圖像(我的防火牆公司塊)。 ***圖像中的成績單文字可能爲文本(SQL)***? – Kiquenet 2016-08-22 07:52:32
@Kiquenet圖像只是編號步驟的截圖。讓我知道,如果你不能按照任何步驟,我會添加更多的文字。 – 2016-08-22 14:11:49
我建議使用唯一性約束而不是索引。約束語法是實現關鍵約束的更傳統方式。與索引語法不同,約束是標準SQL,並且更有可能被數據庫的其他用戶以及訪問數據庫模式元數據的軟件工具所理解和識別。唯一性約束自動爲您創建索引。 – sqlvogel 2010-12-20 08:45:27
我還建議您應該在腳本中始終執行此操作(以及其他任何DDL更改),以便它們可以正確版本化並存儲在您的soruce控制系統中。數據庫更改決不應該從Management Studio GUI進行。 – HLGEM 2012-02-14 23:43:24
當我嘗試「添加」一個項目,並點擊(一般)下的列,它只給我選擇我的「ID」列,並不讓我(或甚至顯示)的「字符串」列向下組合框。我只有兩列,一個是ID,另一個只是文本列,每個項目都應該是唯一的。 當我點擊添加並轉到列時,爲什麼它不允許我在索引/鍵部分下選擇基於文本的列? – 2013-10-19 10:49:16