重建索引出现问题,急

herry507 2012-10-31 04:11:24
执行查询“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登录的,不知道为什么,请指点?
...全文
430 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
herry507 2012-11-02
  • 打赏
  • 举报
回复
alter index PK_MOCMA on MOCMA rebuild
执行这个提示命令已完成
KevinLiu 2012-11-02
  • 打赏
  • 举报
回复
你直接手动REBUILD可以吗?
herry507 2012-11-01
  • 打赏
  • 举报
回复
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了?请知悉,
汤姆克鲁斯 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

加了USE JiaoWu
改了set @command='alter index '+rtrim(@indexname)+'on ['+isnull(@schemaname,'dbo')+'].['+rtrim(@tablename)+'] rebuild'
报如下错误
失败,错误如下:“'dbo' 附近有语法错误。
'dbo' 附近有语法错误。
'dbo' 附近有语法错误。
'db……
[/Quote]

不可能啊


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,@fragmentation

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'
PRINT @command
--exec (@command)
fetch next from tablecursor into @schemaname,@tablename,@indexname,@fragmentation
end
close tablecursor
deallocate tablecursor


你执行这个,输出一下脚本。 然后复制出来几个给我看下
herry507 2012-11-01
  • 打赏
  • 举报
回复
加了USE JiaoWu
改了set @command='alter index '+rtrim(@indexname)+'on ['+isnull(@schemaname,'dbo')+'].['+rtrim(@tablename)+'] rebuild'
报如下错误
失败,错误如下:“'dbo' 附近有语法错误。
'dbo' 附近有语法错误。
'dbo' 附近有语法错误。
'dbo' 附近有语法错误。
'dbo' 附近有语法错误。
'dbo' 附近有语法错误。
已将数据库上下文更改为 'JiaoWu'。

晕了
herry507 2012-11-01
  • 打赏
  • 举报
回复
alter index PK_MOCMA on[dbo].[MOCMA] rebuild
仍然不行啊,有这个文本输出啊
KevinLiu 2012-11-01
  • 打赏
  • 举报
回复
你数据库有MOCMA这个对象吗?或者你数据库有其他的SCHEMA,而这个名字是SCHEMA.MOCMA
herry507 2012-11-01
  • 打赏
  • 举报
回复
执行维护计划:
执行查询“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
仍然不行啊,有这个文本输出
汤姆克鲁斯 2012-10-31
  • 打赏
  • 举报
回复
明显的中括号加错了
[架构.表] 这是什么东东

应该是[架构].[表]


on['+isnull(@schemaname,'dbo')+'].['+rtrim(@tablename)+'] rebuild'
KevinLiu 2012-10-31
  • 打赏
  • 举报
回复
找不到对象,你先PRINT一下你的命令 看看是不是写错了
以学习为目的 2012-10-31
  • 打赏
  • 举报
回复
好习惯

USE 数据库名
declare ...
.
.
發糞塗牆 2012-10-31
  • 打赏
  • 举报
回复
加个use 库名在开头
开启时代 2012-10-31
  • 打赏
  • 举报
回复
把数据库 也限定上,如 TESTdb.dbo.tablename

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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