2014-02-22 57 views
2

我可以在SQLServer 2012的CREATE TABLE語句中創建一個非唯一索引嗎?我發現了一些引用此的預發佈文檔,但是當我嘗試它時,它不起作用。它看起來並沒有進入發佈階段,但我希望得到更明確的答案。SQLServer 2012:表創建期間的非唯一索引定義?

該文件指出,你可以這樣做:

create table rm.test (
    t1 int not null, 
    t2 int, 
    constraint pk_t1 primary key (t1), 
    index idx_t2 (t2) 
) 

然而,抱怨的「指標」。有沒有辦法做到這一點,或者我堅持在創建表後創建一個CREATE INDEX?

回答

3

內聯索引定義爲新的SQL Server 2014

在這種情況下,你可以做

CREATE TABLE rm.test 
    (
    t1 INT NOT NULL CONSTRAINT pk_t1 PRIMARY KEY, 
    t2 INT, 
    CONSTRAINT idx_t2 UNIQUE NONCLUSTERED (t2, t1) 
) 

其中actually creates the same thing雖然。

默認情況下,主鍵是聚集索引,並且CI密鑰會隱式附加到非唯一非聚簇鍵以保證唯一性。

+0

謝謝@Martin Smith。不幸的是,我需要的索引不是唯一的。我只需將索引創建添加到腳本。 – JerseyMike

+0

@JerseyMike - 我不認爲你明白答案。主鍵保證唯一,所以如果您將其附加到NCI鍵,則兩列的組合保證是唯一的。無論如何,如果你要創建一個非唯一的非聚集索引,SQL Server實際上在後臺執行此操作。即,對於該表定義「獨特無結(t2,t1)」和「無結合指數(t2)」,兩者的結構完全相同。 –

+0

你是對的,@馬丁史密斯。我還不明白。我在評論鏈接並閱讀Kalen的博客文章之前評論道。再次感謝你。 – JerseyMike