--首先,创建一个表test,无主键和唯一约束
create table test(a int,b int)
--修改表test使列b不能为空
alter table test alter column b int not null
--修改表test,在列b上建立主键,主键名称为pk,这会自动给表test添加聚集索引
alter table test add constraint pk primary key(b)
--查看表test上的索引
sp_helpindex test
这时会看到在表test上有一个名为pk的聚集索引。如果我们采用drop index test.pk来删除该索引,则会看到如下的错误提示:
那如果我们确实想删除该索引又该如何做呢?其实很简单,既然它是通过主键自动增加的索引,则通过删除主键来做到自动删除该索引,请看如下语句:
--通过删除主键约束来自动删除由该主键约束创建出来的聚集索引
alter table test drop constraint pk
那么这个表上的由添加主键约束而创建出来的聚集索引随着主键的删除而自动删除了。
对于如何删除通过唯一约束创建的唯一索引,原理和删除通过主键约束创建的索引是类似的。请看如下示例:
--修改表test在列a上添加唯一约束,主键名称为U_test,这会自动给表test添加唯一索引
alter table test add CONSTRAINT U_test UNIQUE (a)
--查看表test上的索引
sp_helpindex test
这时会看到表test上有一个名为U_test的唯一索引。如果我们采用drop index test.U_test语句来删除该索引,则会看到如下的错误提示:
我们应该通过删除唯一约束来自动的删除该唯一索引。正确地删除该索引的语句应该为如下所示:
--通过删除唯一约束来自动删除由该唯一约束创建出来的唯一索引
alter table test drop CONSTRAINT U_test
以上示例在SQL Server2000企业版上验证通过。