用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以上是怎么回事呢?如何写比较好?

解决方案 »

  1.   


    更新sysindexes的资料.DBCC UPDATEUSAGE ('a_Building') WITH NO_INFOMSGS 
    GO然后再select name from sysindexes where id=object_ID('a_Building') 看看
      

  2.   

    if exists(select * from sysindexes where ID=object_id('表名') and Name=N'索引名')
    DROP INDEX 索引名  ON 表名
      

  3.   

    (SELECT name FROM sysindexes WHERE name = 'IXS_w_RealEstateCorp_CorpName') 
    --這樣判斷是不行的,索引名可以重復,加多一個條件ID=object_id('表')
      

  4.   

    DROP INDEX 索引名  ON 表名
      

  5.   

    索引都存放在sysindexes系统表中 
    if exists(select * from sysindexes where ID=object_id('表名') and Name=N'索引名')
        DROP INDEX 索引名  ON 表名
      

  6.   

    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'换成我的数据库名也不行
    )
      

  7.   

    无法对 索引'a_Building.WA_Sys_RealEstateCorpId_0C0786B7' 执行 删除,因为它不存在,或者您没有所需的权限。 
    ===
    换个最高权限帐户试试?
      

  8.   

    呵呵,_WA_Sys打头的是统计资料。加上Root<>0的判断就行了select name from sysindexes where id=object_ID('a_Building')  and root<>0 
      

  9.   


    在sql2000底下是可以用Root<>0
    但是我是在SQL2005环境下的,需要用什么来标识呢?目前只发现status字段的值不一样,但是还找不到规律
    望指点...
      

  10.   

    --试下这个
    select name from sysindexes 
    where id=object_ID('a_Building') and indid > 0 and indid < 255 and (status & 64)=0
      

  11.   

    indid 
     smallint 
     ID of the index:0 = Heap   ///实在不明白这是什么意思,大虾们指导.
    1 = Clustered index >1 = Nonclustered index