sql 2000 表里的索引删不了,有什么方法强制删掉的

sql 2000 表里的索引删不了,有什么方法强制删掉的,第1张

如果 是主键索引,和唯一索引,并且为其他表数据外键 ,是不能删除,,先取消外键索引才行。

CREATE UNIQUE INDEX 终止,因为发现了索引 ID 2 的重复键。最重要的主键为 'type 6c, len 9'。

这个原因是你你创建索引的列 表中存在重复值,

删除索引可以使用ALTER TABLE或DROP INDEX语句来实现,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下:

DROP INDEX index_name ON talbe_name

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE table_name DROP PRIMARY KEY

注:其中,前两条语句是等价的,删除掉table_name中的索引index_name。

扩展资料:

索引的使用及注意事项 

EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句。

使用方法,在select语句前加上Explain就可以了:Explain select * from user where id=1

尽量避免这些不走索引的sql:

SELECT `sname` FROM `stu` WHERE `age`+10=30-- 不会使用索引,因为所有索引列参与了计算

SELECT `sname` FROM `stu` WHERE LEFT(`date`,4) <1990-- 不会使用索引,因为使用了函数运算,原理与上面相同

SELECT * FROM `houdunwang` WHERE `uname` LIKE'后盾%' 走索引

SELECT * FROM `houdunwang` WHERE `uname` LIKE "%后盾%" 不走索引

正则表达式不使用索引,这应该很好理解,所以为什么在SQL中很难看到regexp关键字的原因。

字符串与数字比较不使用索引

CREATE TABLE `a` (`a` char(10))

EXPLAIN SELECT * FROM `a` WHERE `a`="1" 走索引

EXPLAIN SELECT * FROM `a` WHERE `a`=1 不走索引

请采用下列脚本

/*删除索引*/

declare @table table  (keyId int identity,name1 varchar(100),name2 varchar(100))

insert into @table(name1,name2)

 select object_name(object_id),name from sys.indexes where name like 'IDX%'  

declare @i    int 

declare @imax int 

declare @name1 varchar(100)

declare @name2 varchar(100)

set @i =1 

select @imax = max(keyId) from @table t 

while @i <=@imax

begin

set @name1 =''

set @name2 ='' 

select @name1  = name1,@name2=name2 from @table t where t.keyId =@i

print 'drop index ['+@name2 +'] on table ['+@name1+'] '

 ---exec  ('drop index '+@name2 +' on table '+@name1  )  

 

  

set @i =@i+1 

end

go

declare @table table(keyId int identity,name varchar(100))

insert into @table (name) select name from sys.tables where type='u'

/*修理表结构*/

declare @i    int 

declare @imax int 

declare @name varchar(100)

set @i =1 

select @imax = max(keyId) from @table t 

while @i <=@imax

begin

set @name =''

select @name  = name from @table t where t.keyId =@i

 

print 'alter table ['+@name +'] drop column [_MASK_FROM_V2]'

--exec ('alter table '+@name +' drop column [_MASK_FROM_V2]')

 

set @i =@i+1 

end

分两步 *** 作

1 删除索引

2 修改表结构

有疑问及时沟通。

先在测试机上 *** 作,请采纳!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9895262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存