Sql-Server

SQL Server 等效於 Oracle USING INDEX 子句

  • November 30, 2015

Oracle 中是否有與 SQL Server 2008 等效的 USING INDEX 子句?專門用於構造:

CREATE TABLE c(c1 INT, c2 INT);
CREATE INDEX ci ON c (c1, c2);
ALTER TABLE c ADD CONSTRAINT cpk PRIMARY KEY (c1) USING INDEX ci;

在有關唯一索引的 Sql Server文件中它指出(強調添加):

唯一索引通過以下方式實現:

PRIMARY KEY 或 UNIQUE 約束

創建 PRIMARY KEY 約束時,如果表上的聚群索引尚不存在並且您沒有指定唯一的非聚群索引,則會自動創建一個或多個列上的唯一聚群索引。主鍵列不能允許 NULL 值。

這似乎意味著有一種方法可以指定應將哪個索引用於主鍵。

Oracle 中是否有與 SQL Server 2008 等效的 USING INDEX 子句?

不會。當您在 SQL Server 中創建主鍵或唯一約束時,會自動創建支持該約束的唯一索引,並使用相同的鍵。

這似乎意味著有一種方法可以指定應將哪個索引用於主鍵。

否。如果您未指定,該文件僅試圖解釋自動支持索引將創建為集群還是非集群。我同意它的措辭令人困惑。

澄清一下,當您在未表達首選項的情況下向現有表添加主鍵約束時,如果表上沒有預先存在的聚集索引,則支持索引將被聚集。如果已經存在聚集索引,則支持索引將創建為非聚集索引

PRIMARY KEY CLUSTERED您可以使用:或專門請求集群或非集群主鍵PRIMARY KEY NONCLUSTERED

公平地說,文件在以下主題上更加清晰:

table_constraint (Transact-SQL)

引用自:https://dba.stackexchange.com/questions/116965