2017-07-07 66 views
1

我需要將數據從Oracle數據庫移動到MS SQL Server 2014. 但是我得到了這個「USING INDEX」語句的問題,它幫助我在oracle添加一些約束。我想知道是否有人可以在Sql Server中提供我和「USING INDEX」的等同權限。Oracle中的索引選項(使用索引)等效於SQL Server 2014

CONSTRAINT "MESSAGE_LOG_RECORD_PK" PRIMARY KEY ("RECORD_NO") 
**USING INDEX** PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DATA" ENABLE, 

回答

0

It seems using index creates index in specified table space as per the parameters you specified.

所以你可以做以下的同時創建表,以便SQL Server將索引配置爲每默認參數

create table t1 
(
id int not null primary key 
) 

否則,你可以使用下面的語法來約束添加到表一旦表創建

CREATE CLUSTERED INDEX [indxname] ON [dbo].[table1] 
(
    id 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 

如果你離開的文件組的選擇,因爲表創建

我建議使用第一種方法和樂會造成在同一個文件組索引AVE違約,否則你可以在這裏探索的選項:https://docs.microsoft.com/en-us/sql/t-sql/statements/create-index-transact-sql

0

要添加一個B樹索引支持一個堆一個主鍵約束,以及存儲後盾指數上的特定文件組,是這樣的:

CREATE TABLE MESSAGE_LOG 
(
    RECORD_NO INT NOT NULL, 
    OTHER_COLUMN INT NOT NULL, 
    --. . . 
    CONSTRAINT MESSAGE_LOG_RECORD_PK PRIMARY KEY NONCLUSTERED (RECORD_NO) ON DATA 
) 

儘管在SQL Server中,我們通常使用聚簇索引表而不是堆,但只需保留NONCLUSTERED,因爲CLUSTERED是主鍵約束的默認值。另外,每個數據庫都有自己的文件組,因此您不經常將表或索引直接放置在非默認文件組上。因此,在SQL Server通常你只會有:

CREATE TABLE MESSAGE_LOG 
(
    RECORD_NO INT NOT NULL, 
    OTHER_COLUMN INT NOT NULL, 
    --. . . 
    CONSTRAINT MESSAGE_LOG_RECORD_PK PRIMARY KEY (RECORD_NO) 
) 
0

根據這一reference

CONSTRAINT "MESSAGE_LOG_RECORD_PK" PRIMARY KEY ("RECORD_NO") 
**USING INDEX** ... TABLESPACE "DATA" ENABLE 

似乎表明,這一條款(CREATE/ALTER TABLE ...的一部分 - 甲骨文語法)將用於主鍵創建UNIQUE INDEX約束(MESSAGE_LOG_RECORD_PK)。

(1)(SQL Server數據庫內主表型),用於基於磁盤的行存儲表的SQL Server的默認行爲是如下:

(1.1)這將創建一個UNIQUE CLUSTERED INDEX定義PRIMARY KEY約束時在沒有另一個CLUSTERED索引的表上。

(1.2)如果在表上定義了PRIMARY KEY約束條件(如果該表已具有CLUSTERED索引),它將創建UNIQUE NONCLUSTERED INDEX

(1.4),它會嘗試創建當前表的UNIQUE CLUSTERED/NONCLUSTERED指數根據的PRIMARY KEY約束選項:因此聚集/非聚集:

CREATE TABLE Groups (
     GroupId INT IDENTITY(1, 1) NOT NULL 
      CONSTRAINT PK_Groups_GroupId PRIMARY KEY CLUSTERED ON [PRIMARY] (GroupId), 
... 
) 

而且,在這種情況下,通知數據的SQL名服務器文件組(在這種情況下爲PRIMARY;我相信〜爲Oracle表空間)用於存儲與此主鍵關聯的索引數據。

(2)我的答案是下面的SQL語句,將增加對RECORD_NO列定義主鍵約束(這也將創建一個唯一的聚集 - 默認 - 指數),也definied對數據文件組:

ALTER TABLE dbo.LOG_RECORD 
ADD CONSTRAINT MESSAGE_LOG_RECORD_PK 
PRIMARY KEY CLUSTERED ON [DATA] (RECORD_NO) 
+0

非常感謝@Bogdan! –

+0

我希望它有幫助。 –