sql编译与重编译

 

sql编译与重编译

 

1.sp_recompile
使存储过程和触发器在下次运行时重新编译。


2.sp_refreshview
如果视图所依赖的基础对象发生更改(:表增加了一个字段),则视图不会自动更新,这时需要调用该存储过程来对视图进行刷新。有人说,重新打开一下视图就可以更新视图,但我试了没有成功。

1:刷新指定名称的视图
sp_refreshview 'v_tblItem'

2:刷新整个数据库中的所有视图
 
CREATE PROCEDURE [dbo].[_Proc_CheckView](

    @IsDelete bit=0 --是否要删除无效的视图

    )

AS

BEGIN

      

    DECLARE @vName sysname ;

    DECLARE @ErrorMessage nvarchar(200);

    DECLARE @count int;

    SET @count=0;

    DECLARE @ErrorCount int;

    SET @ErrorCount=0;

 

    CREATE TABLE #temp(

       ViewName nvarchar(776)

       )

    DECLARE refresh_cursor CURSOR FOR 

        SELECT Name from sysobjects

        WHERE xtype = 'V'

        AND category=0

        order by crdate

    FOR READ ONLY  

    OPEN refresh_cursor

    FETCH NEXT FROM refresh_cursor 

    INTO @vName

       WHILE @@FETCH_STATUS = 0

       BEGIN

           BEGIN try

              exec sys.sp_refreshview @vName

           END try

           BEGIN catch

              insert into #temp(ViewName)

              values(    @vName)

              SET @ErrorCount=@ErrorCount+1

              IF(@IsDelete=1)

              begin

                  DECLARE @sql nvarchar(500)

                  SET @sql='drop view  '+ @vName

                  EXEC sp_executesql @sql

              end

           END catch

           SET @count=@count+1;

       FETCH NEXT FROM refresh_cursor 

            INTO @vName

       END

    CLOSE refresh_cursor

    DEALLOCATE refresh_cursor

 

    IF(@ErrorCount>0)

    begin

       select '本次共检查视图【'+Convert(nvarchar(20),@count)+'】个,其中有【'+Convert(nvarchar(20),@ErrorCount)+'】个无效,无效视图参见下表:'

       SELECT * FROM #temp

    END

    ELSE

    BEGIN

       select '本次共检查视图【'+Convert(nvarchar(20),@count)+'】个,全部有效。'

    END

 

    DROP TABLE #temp

 

END

GO

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值