关于删除索引的脚本

肥仔胧 2008-09-09 03:31:26
用select name from sysindexes where id=object_ID('a_Building')
发现表a_Building里面有很多索引,但是到设计器去查看,确是没有的,
导致我在编写索引脚本的执行删除的时候报错:
IF EXISTS (SELECT name FROM sysindexes WHERE name = 'IXS_w_RealEstateCorp_CorpName')
DROP INDEX a_Building.IXS_w_RealEstateCorp_CorpName
GO

以上是怎么回事呢?如何写比较好?
...全文
306 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2008-09-10
  • 打赏
  • 举报
回复
indid
smallint
ID of the index:

0 = Heap ///实在不明白这是什么意思,大虾们指导.
1 = Clustered index

>1 = Nonclustered index
ChinaJiaBing 2008-09-10
  • 打赏
  • 举报
回复
.........................
utpcb 2008-09-10
  • 打赏
  • 举报
回复
统计要更新上次有人问过 类似的
wgzaaa 2008-09-10
  • 打赏
  • 举报
回复
--试下这个
select name from sysindexes
where id=object_ID('a_Building') and indid > 0 and indid < 255 and (status & 64)=0
肥仔胧 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Garnett_KG 的回复:]
呵呵,_WA_Sys打头的是统计资料。

加上Root <>0的判断就行了

select name from sysindexes where id=object_ID('a_Building') and root <>0
[/Quote]

在sql2000底下是可以用Root<>0
但是我是在SQL2005环境下的,需要用什么来标识呢?目前只发现status字段的值不一样,但是还找不到规律
望指点...
一品梅 2008-09-10
  • 打赏
  • 举报
回复
是不是你的那个索引是主键,主键也是一种索引吧?
Garnett_KG 2008-09-10
  • 打赏
  • 举报
回复
呵呵,_WA_Sys打头的是统计资料。

加上Root<>0的判断就行了

select name from sysindexes where id=object_ID('a_Building') and root<>0
肥仔胧 2008-09-10
  • 打赏
  • 举报
回复
已经是用sa登录了
一品梅 2008-09-10
  • 打赏
  • 举报
回复
无法对 索引'a_Building.WA_Sys_RealEstateCorpId_0C0786B7' 执行 删除,因为它不存在,或者您没有所需的权限。
===
换个最高权限帐户试试?
肥仔胧 2008-09-10
  • 打赏
  • 举报
回复
select name from sysindexes where id=object_ID('a_Building')
得出一下结果:
------------------------
name
IX_a_building_buildingID
_WA_Sys_RealEstateCorpId_0C0786B7
IXS_a_Building_BuildingName
_WA_Sys_ItemId_0C0786B7
_WA_Sys_BuildingName_0C0786B7
_WA_Sys_BuildingAddr_0C0786B7
_WA_Sys_ClosedownState_0C0786B7
_WA_Sys_BuildingArea_0C0786B7
_WA_Sys_RegisType_0C0786B7
_WA_Sys_ForecastState_0C0786B7
IXS_a_Building_RealEstateCorpID
_WA_Sys_FloorsNumbers_0C0786B7
_WA_Sys_StateCode_0C0786B7
_WA_Sys_District_0C0786B7
_WA_Sys_BuildFunc_0C0786B7
_WA_Sys_MbFloorNumbers_0C0786B7
_WA_Sys_MoundNo_0C0786B7
_WA_Sys_DroitSource_0C0786B7
_WA_Sys_LandArea_0C0786B7
_WA_Sys_CompleteDate_0C0786B7
_WA_Sys_ConstructionQuality_0C0786B7
_WA_Sys_DroitType_0C0786B7
_WA_Sys_PreMappingCorpId_0C0786B7
_WA_Sys_BuildingGUID_0C0786B7
PK__a_Building__47FC752D
_WA_Sys_00000020_0C0786B7
_WA_Sys_0000003B_0C0786B7
_WA_Sys_0000003E_0C0786B7

然后是执行:
IF EXISTS (SELECT name FROM sysindexes WHERE id=object_ID('a_Building') and name = '_WA_Sys_RealEstateCorpId_0C0786B7')
DROP INDEX WA_Sys_RealEstateCorpId_0C0786B7 on a_Building
得出以下提示:
消息 3701,级别 11,状态 7,第 2 行
无法对 索引'a_Building.WA_Sys_RealEstateCorpId_0C0786B7' 执行 删除,因为它不存在,或者您没有所需的权限。


(
另注:Garnett_KG 的
更新sysindexes的资料.
DBCC UPDATEUSAGE ('a_Building') WITH NO_INFOMSGS
GO
的方法不行阿,我把'a_Building'换成我的数据库名也不行
)
zoujp_xyz 2008-09-09
  • 打赏
  • 举报
回复
索引都存放在sysindexes系统表中
if exists(select * from sysindexes where ID=object_id('表名') and Name=N'索引名')
DROP INDEX 索引名 ON 表名
水族杰纶 2008-09-09
  • 打赏
  • 举报
回复
DROP INDEX 索引名 ON 表名
sunyuchuan86 2008-09-09
  • 打赏
  • 举报
回复
UP 学习了!
中国风 2008-09-09
  • 打赏
  • 举报
回复
(SELECT name FROM sysindexes WHERE name = 'IXS_w_RealEstateCorp_CorpName')
--這樣判斷是不行的,索引名可以重復,加多一個條件ID=object_id('表')
中国风 2008-09-09
  • 打赏
  • 举报
回复
if exists(select * from sysindexes where ID=object_id('表名') and Name=N'索引名')
DROP INDEX 索引名 ON 表名
Garnett_KG 2008-09-09
  • 打赏
  • 举报
回复

更新sysindexes的资料.

DBCC UPDATEUSAGE ('a_Building') WITH NO_INFOMSGS
GO

然后再select name from sysindexes where id=object_ID('a_Building') 看看

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧