Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15177856
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: 数据库开发技术

2008-05-28 15:28:29

使用SQLSERVER2000创建表时如果表中有text或image栏位会自动创建一个系统索引,其indid=255,索引的名称为固定字符’t’加表名。直接使用drop index无法删除该索引,其提示信息为“无法 除去 索引 '<表名>.<索引名称>',因为它是系统 索引。”,是不是真的不能删除呢?答案是否定的。
    其实通过创建索引时带DROP_EXISTING选项可以轻松绕过SQLSERVER2000的安全验证从而实现删除系统索引功能,原理是先创建一个同名的非系统索引,然后删除。这也反映出SQLSERVER2000在安全性上存在一定的不足。
    我们假设表名为t_test,包含c1和c2栏位,栏位c2为text类型,其自动创建的系统索引为tt_test。
    CREATE INDEX tt_test ON t_test(c1) WITH DROP_EXISTING
    DROP INDEX t_test.tt_test
    以上代码在SQLSERVER2000上通过。
    不过最后强烈建议你不要删除该索引,因为该索引指明了表中text、image数据将存放在哪个文件组,如果删除,新插入的数据将被放置在缺省文件组,还可能导致查询不到已有的数据,这应该不是你想要的结果吧?
阅读(459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~