zoukankan      html  css  js  c++  java
  • 视图那些事

      在日常的开发中,sometimes我们会不得不更改一些表结构,多数时候我们是只增不减,但有时我们也会删减一些废弃的字段,更特殊的情况是我们会更改表字段的类型,这样会有一些的连带的问题出现,比方在存储过程或视图中使用到了废弃的字段,类型的改变也会产生不小的影响。如果视图、函数不很很多,单一执行下就能排查哪些受到了影响,但是如果很多呢,上百个视图+存储过程呢?这里我贴出我的解决方式,目前我对这个解决方式也不是特别满意,没有达到我心中的效果,希望看到的朋友有好的解决方案@下憋人。

    CREATE TABLE #ErrViewTable (NAMES varchar(8000))
    DECLARE @i INT,@totalNum INT,@name VARCHAR(255)
    DECLARE @t TABLE(id INT IDENTITY ,col VARCHAR(255))
    
    SET NOCOUNT ON  
    
    INSERT  INTO @t SELECT  Name FROM dbo.sysobjects WHERE OBJECTPROPERTY(id, N'IsView') = 1 AND ( NOT name IN ( 'sysconstraints', 'syssegments' )) 
    SELECT  @totalNum = @@ROWCOUNT , @i = 1 
    WHILE @i < @totalNum 
        BEGIN
            SELECT  @name = col  FROM  @t  WHERE   id = @i
            EXEC (N'SELECT top 1 * FROM '+ @name) 
            IF(@@error>0)    
                INSERT INTO #ErrViewTable SELECT  @name 
            SET @i=@i+1         
        END
      
     
    SELECT NAMES AS 存在错误的视图 FROM #ErrViewTable 
    DROP
    TABLE #ErrViewTable

      有些时候我们会更改表的结构,如字段类型,这个时候引用到表的视图是不会自动修改的,有什么办法可以解决这个问题吗?当然有,手动执行下Alter View [ViewName]即可,可是当视图很多的时候这么执行也太不智能了,有没有好的办法呢?当然有,可以构造动态SQL用EXEC来执行就可以了,形式如下
    EXEC (‘语句’)
    上面的语句执行起来过于笨拙,其实SQL提供了系统的存储过程sp_refreshview, 使用她就可以很优雅的完成这项工作了

    DECLARE @t TABLE(id INT IDENTITY,col VARCHAR(255))
    DECLARE @i INT,@totalNum int,@name VARCHAR(255)
    INSERT INTO @t select Name from dbo.sysobjects where OBJECTPROPERTY(id, N'IsView') = 1 and (not name in ('sysconstraints','syssegments')) 
    SELECT @totalNum=@@ROWCOUNT,@i=1
    WHILE @i < @totalNum 
        BEGIN
            SELECT  @name = col  FROM    @t     WHERE   id = @i
            EXEC sp_refreshview @name
            SET @i = @i + 1
        END
  • 相关阅读:
    原生化:AnDevCon 2014 McVeigh 的主题演讲
    MVC 5 App 通过 Facebook OAuth2 登陆(Sign-on)的问题
    MVC 5 第三章 HTML Helper
    Node.js 初探
    MVC 5 第二章 项目结构
    MVC 5 第一章 起航
    新的开始
    Xcode开发如何在调试时轻松找到程序在哪里崩溃?
    100个直接可以拿来用的JavaScript实用功能代码片段(转)
    js得到当前页面的url信息方法(JS获取当前网址信息)
  • 原文地址:https://www.cnblogs.com/mfkaudx/p/3663740.html
Copyright © 2011-2022 走看看