【求助,没有分只能发在这】循环刷新数据库中所有视图,在2005中没有问题,在2008中报错

木易随风 2015-08-24 03:20:30
自己写的循环刷新数据库中所有视图,第一步先获取库中所有的视图,写道变量表中,然后循环,使用sp_refreshview一个一个刷新,同样的数据库在2005环境下可以顺利执行,在2008环境下,报错,错误信息如下,(数据库中有些视图现在已经不能使用,刷新时会报某个对象不存在。)

消息 266,级别 16,状态 2,过程 URM_P_REFRESHVIEW_ALL,第 0 行
EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 0,当前计数 = 1。
消息 3998,级别 16,状态 1,第 1 行
在批处理结束时检测到不可提交的事务。该事务将回滚。


DECLARE @I INT,@CNT INT,@VIEWNAME SYSNAME,@J INT
DECLARE @VIEWDICT TABLE(RID INT IDENTITY(1,1),VIEWNAME SYSNAME)
DECLARE @ERRORINFO TABLE(RID INT IDENTITY(1,1),VIEWNAME SYSNAME,INFO VARCHAR(2000))
INSERT INTO @VIEWDICT
SELECT [name] FROM sys.objects where [type]='V' ORDER BY [name]
SET @I=1
SELECT @I=1,@CNT=COUNT(*) FROM @VIEWDICT
WHILE @I<=@CNT
BEGIN
SELECT @VIEWNAME=VIEWNAME FROM @VIEWDICT WHERE RID=@I
BEGIN TRY
EXEC ('SP_REFRESHVIEW ['+@VIEWNAME+']')
END TRY
BEGIN CATCH
INSERT INTO @ERRORINFO(VIEWNAME,INFO)
SELECT @VIEWNAME,ERROR_MESSAGE()
END CATCH
SET @I=@I+1
END
...全文
305 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Haytor 2015-08-25
  • 打赏
  • 举报
回复
应该是你有个视图有异常,你把这个视图出错原因找到然后处理之后,再执行应该就没有问题了。

11,849

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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