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

木易随风 木易随风 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
自己写的循环刷新数据库中所有视图,第一步先获取库中所有的视图,写道变量表中,然后循环,使用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
...全文

相关推荐

如何将SQL Server 2005升级到SQL Server 2008

在将SQL Server 2005升级至SQL Server 2008的过程中,涉及的知识及技巧涵盖了从理解新版本特性到优化、安全、开发、维护高可用性数据库、数据仓库构建和报告服务使用的广泛范围。

weixin_38682161

TFS 2010服务层重构:SQL Server兼容性与权限模型升级解析

Team Foundation Server(TFS)作为微软早期企业级ALM平台,其服务层架构演进深刻影响着团队协作基础设施的稳定性与可扩展性。从技术本质看,TFS服务层是封装版本控制、工作项跟踪、构建管理等能力的核心中间件,依赖于数据库访问抽象、权限治理模型和跨系统集成机制。TFS 2010的关键突破在于将数据访问解耦为运行时动态加载的SQL Server提供者,并引入三级权限体系与资源级授权模型,显著提升SQL Server 2008/R2兼容性与细粒度管控能力。这些改进不仅解决了TFS 2008时代

chuanbofen3674

数据仓库Foodmart2005 实例数据库

在SQL Server中,我们可以使用RESTORE DATABASE命令恢复这个备份,从而获得Foodmart2005数据库。这包括所有表、索引、视图、存储过程和其他数据库对象。

mhx1535mz

Sqlserver2005-2008数据库置疑处理办法

### Sqlserver2005-2008数据库置疑处理办法在处理SQL Server 2005至2008版本中的置疑数据库时,我们首先要理解什么是置疑状态以及如何解决这类问题。

www_000

在VS2008下,利用c#在SQLSERVER2005实现两个数据库同步

以上步骤概括了在VS2008和C#中实现SQL Server 2005数据库同步的基本流程。具体实现细节可能需要根据实际情况进行调整,如处理不同数据类型、触发器、索引等。

wtktroy
评论 1
收藏 已收藏
分享
返回顶部
木易随风
非技术版 11,847 成员 33,667 内容