我需要将数据从Oracle数据库移动到MS SQL Server 2014。 但我遇到了这个问题"使用索引"声明,它帮助我在oracle中添加一些约束。我想知道是否有人可以提供我和#34; USING INDEX"在Sql Server中。
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 :(得分: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
如果您保留filegroup选项,它将在创建表的同一文件组中创建索引
我建议使用第一种方法并保留默认值,否则您可以在此处浏览选项:https://docs.microsoft.com/en-us/sql/t-sql/statements/create-index-transact-sql
答案 1 :(得分:0)
将由BTree索引支持的主键约束添加到堆中,并将其支持索引存储在特定文件组中,如下所示:
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中我们通常使用Clustered Index表而不是堆,但只留下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)
)
答案 2 :(得分:0)
根据此reference
CONSTRAINT "MESSAGE_LOG_RECORD_PK" PRIMARY KEY ("RECORD_NO")
**USING INDEX** ... TABLESPACE "DATA" ENABLE
似乎暗示此子句(CREATE/ALTER TABLE ...
- Oracle语法的一部分)将为主键约束(UNIQUE INDEX
)创建MESSAGE_LOG_RECORD_PK
。
(1)基于磁盘的行存储表(SQL Server数据库中的主表类型)的SQL Server的默认行为如下:
(1.1)当在没有另一个CLUSTERED索引的表上定义PRIMARY KEY约束时,它将创建UNIQUE CLUSTERED INDEX
。
(1.2)如果表中已定义UNIQUE NONCLUSTERED INDEX
约束,如果该表已经具有CLUSTERED索引,则会创建PRIMARY KEY
。
(1.4)它将尝试根据PRIMARY KEY约束选项在当前表上创建UNIQUE CLUSTERED
/ NONCLUSTERED
索引:clustered / nonclustered so:
CREATE TABLE Groups (
GroupId INT IDENTITY(1, 1) NOT NULL
CONSTRAINT PK_Groups_GroupId PRIMARY KEY CLUSTERED ON [PRIMARY] (GroupId),
...
)
另外,在这种情况下请注意数据的名称SQL Server文件组(在这种情况下为PRIMARY
;〜作为Oracle表空间我相信)用于存储与此主键关联的索引的数据。
(2)我的答案是遵循SQL语句,该语句将添加在RECORD_NO列上定义的PRIMARY KEY约束(它还将创建一个UNIQUE CLUSTERED - default - index),并在DATA文件组上定义:
ALTER TABLE dbo.LOG_RECORD
ADD CONSTRAINT MESSAGE_LOG_RECORD_PK
PRIMARY KEY CLUSTERED ON [DATA] (RECORD_NO)