执行查询“declare @schemaname varchar(255)
declare @tablename varchar(255)
declare @indexname varchar(255)
declare @fragmentation float
declare @command varchar(255)
declare tablecursor cursor for select SCHEMA_NAME(CAST(OBJECTPROPERTYEX(i.object_id,'schemaId')as int)),object_name(i.object_id),i.name,ps.avg_fragmentation_in_percent 
from sys.dm_db_index_physical_stats(db_id(),null,null,null,null)as ps join sys.indexes as i on ps.object_id=i.object_id and ps.index_id=i.index_id where avg_fragmentation_in_percent>30
open tablecursor
while @@fetch_status=0
begin
  print @schemaname+'.'+@tablename+'.'+@indexname+'is'+cast(@fragmentation as varchar)+'% fragmentented'
  set @command='alter index '+rtrim(@indexname)+' on['+isnull(@schemaname,'dbo')+'.'+rtrim(@tablename)+'] rebuild'
  exec (@command)  
fetch next from tablecursor into @schemaname,@tablename,@indexname,@fragmentation
end
close tablecursor
deallocate tablecursor”失败,错误如下:“找不到对象 "dbo.MOCMA",因为它不存在或者您没有所需的权限。
dbo.MOCMA表确实存在,而是用SA登录的,不知道为什么,请指点?

解决方案 »

  1.   

    把数据库 也限定上,如 TESTdb.dbo.tablename
      

  2.   

    好习惯USE  数据库名
    declare ...
    .
    .
      

  3.   

    找不到对象,你先PRINT一下你的命令 看看是不是写错了
      

  4.   

    明显的中括号加错了
    [架构.表] 这是什么东东应该是[架构].[表]
    on['+isnull(@schemaname,'dbo')+'].['+rtrim(@tablename)+'] rebuild'
      

  5.   

    加了USE JiaoWu
    改了set @command='alter index '+rtrim(@indexname)+'on ['+isnull(@schemaname,'dbo')+'].['+rtrim(@tablename)+'] rebuild'
    报如下错误
    失败,错误如下:“'dbo' 附近有语法错误。
    'dbo' 附近有语法错误。
    'dbo' 附近有语法错误。
    'dbo' 附近有语法错误。
    'dbo' 附近有语法错误。
    'dbo' 附近有语法错误。
    已将数据库上下文更改为 'JiaoWu'。晕了
      

  6.   


    不可能啊
    declare @schemaname varchar(255)
    declare @tablename varchar(255)
    declare @indexname varchar(255)
    declare @fragmentation float
    declare @command varchar(255)
    declare tablecursor cursor for select SCHEMA_NAME(CAST(OBJECTPROPERTYEX(i.object_id,'schemaId')as int)),object_name(i.object_id),i.name,ps.avg_fragmentation_in_percent  
    from sys.dm_db_index_physical_stats(db_id(),null,null,null,null)as ps join sys.indexes as i on ps.object_id=i.object_id and ps.index_id=i.index_id where avg_fragmentation_in_percent>30
    open tablecursor
    fetch next from tablecursor into @schemaname,@tablename,@indexname,@fragmentationwhile @@fetch_status=0
    begin
      print @schemaname+'.'+@tablename+'.'+@indexname+'is'+cast(@fragmentation as varchar)+'% fragmentented'
      set @command='alter index '+rtrim(@indexname)+' on['+isnull(@schemaname,'dbo')+'].['+rtrim(@tablename)+'] rebuild'
      PRINT @command
      --exec (@command)   
    fetch next from tablecursor into @schemaname,@tablename,@indexname,@fragmentation
    end
    close tablecursor
    deallocate tablecursor你执行这个,输出一下脚本。 然后复制出来几个给我看下
      

  7.   

    alter index COPMA_K01 on[dbo].[COPMA] rebuild
    alter index COPMA_K02 on[dbo].[COPMA] rebuild
     
    alter index PK_BOMTG on[dbo].[BOMTG] rebuild
     
    alter index PURMA_K01 on[dbo].[PURMA] rebuild
    alter index PURMA_K02 on[dbo].[PURMA] rebuild
     
     
     
    alter index PK_CMSMU on[dbo].[CMSMU] rebuild
     
    alter index PK_ACRTB on[dbo].[ACRTB] rebuild
    alter index ACRTB_K01 on[dbo].[ACRTB] rebuild
    执行后输出文本如上,是不是OK了?请知悉,
      

  8.   

    执行维护计划:
    执行查询“use JiaoWu
    declare @schemaname varchar(255)
    declare @tablename varchar(255)
    declare @indexname varchar(255)
    declare @fragmentation float
    declare @command varchar(255)
    declare tablecursor cursor for select * from fragm
    open tablecursor
    fetch next from tablecursor into @schemaname,@tablename,@indexname,@fragmentation
    while @@fetch_status=0
    begin
       set @command='alter index '+rtrim(@indexname)+' on['+isnull(@schemaname,'dbo')+'.'+rtrim(@tablename)+'] rebuild'
      exec (@command)  
    fetch next from tablecursor into @schemaname,@tablename,@indexname,@fragmentation
    end
    close tablecursor
    deallocate tablecursor”失败,错误如下:“找不到对象 "dbo.MOCMA",因为它不存在或者您没有所需的权限。
    已将数据库上下文更改为 'JiaoWu'。”。失败的原因可能有: 查询本身有问题、未正确设置 "ResultSet" 属性、未正确设置参数或未正确建立连接。alter index PK_MOCMA on[dbo].[MOCMA] rebuild
    仍然不行啊,有这个文本输出
      

  9.   

    你数据库有MOCMA这个对象吗?或者你数据库有其他的SCHEMA,而这个名字是SCHEMA.MOCMA
      

  10.   

    alter index PK_MOCMA on[dbo].[MOCMA] rebuild
    仍然不行啊,有这个文本输出啊
      

  11.   

    alter index PK_MOCMA on MOCMA rebuild
    执行这个提示命令已完成