欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

在asp.net中验证sqlserver视图是否可以正确执行

创建时间:2011年12月04日 21:32  阅读次数:(5453)
分享到:
我们知道,如视图中的基础表的字段发生了变化,则视图可能会变不可用。如果我们的数据库中定义了大量的视图,而基础表的变化也比较大,这时候如果要我们一个一个的去确定视图是不是能够正确执行,那岂不是一件工作量非常大的事情,今天小编在整理自己以前做的一个小工具的时候,在小工具发现了以前做的自动检测数据库中所有视图的正确性的方法,贴出来供大家参考:

在这个方法中用到了sp_refreshview存储过程,该存储过程用于更新指定的未绑定到架构的视图的元数据。如果视图的基础表发现了变化,我们可以使用sp_refreshview '视图表'来更新该视图,使该视图与基础表的字段同步,不至于出现视图列错位的情况。而如果视图中用到的字段在基础表中被删除了,则sp_refreshview会报出错误,所以,利用这个存储过程,我们就可以检测视图的可用性了。

整个方法定义如下:
/// <summary >
/// 获取所有视图验证结果
/// </summary >
/// <returns ></returns >
public static DataTable GetReFreshView()
{
    string sql = "select name from sys.views";

    using (SqlConnection conn = SqlConn())
    {
        conn.Open();
        using (SqlCommand cmd = InitSqlCommand(conn, sql))
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("message", typeof(string));

            DataSet ds = Query(cmd);

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                sql = @"
                    declare @error varchar(50)
                    begin try
                    exec sp_refreshview " + dr["name"].ToString() + " set @error='视图" + dr["name"].ToString() + "验证成功!' end try begin catch set @error='视图" + dr["name"].ToString() + "验证失败\r\n'+error_message() end catch select @error";
                cmd.CommandText = sql;

                object result = cmd.ExecuteScalar();
                dt.Rows.Add(result.ToString());
            }

            return dt;
        }
    }
}


该方法中用到了sqlserver的目录视图sys.views,该视图返回数据库中所有的用户视图,具体用法可以参考本站以下链接:
利用SQL语句查询数据库中所有视图

该方法首先是利用sys.views读出数据库中所有视图并存储到DataTable中,然后循环DataTable行,逐行利用sp_refreshview来检测视图的正确性,如果视图大多,可能会造成界面假死,所以在小编的工具中,这个是利用多线程来解决的。大家也可以试试在数据库中检测出所有结果后再返回给用户。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 0+68=? 的结果(结果是:68)
结  果: