技术开发 频道

SQL-BUG:轻松删除系统索引

【IT168 技术文档】

    使用SQL Server 2000创建表时如果表中有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数据将存放在哪个文件组,如果删除,新插入的数据将被放置在缺省文件组,还可能导致查询不到已有的数据,这应该不是你想要的结果吧?

0
相关文章