您现在的位置是:首页 > .NET

.NET

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

2020-11-20 10:39:14 .NET admin
我们知道,如视图中的基础表的字段发生了变化,则视图可能会变不可用。如果我们的数据库中定义了大量的视图,而基础表的变化也比较大,这时候如果要我们一个一个的去确定视图是不是能够正确执行,那岂不是一件工作量非常大的事情,今天小编在整理自己以前做的
我们知道,如视图中的基础表的字段发生了变化,则视图可能会变不可用。如果我们的数据库中定义了大量的视图,而基础表的变化也比较大,这时候如果要我们一个一个的去确定视图是不是能够正确执行,那岂不是一件工作量非常大的事情,今天小编在整理自己以前做的一个小工具的时候,在小工具发现了以前做的自动检测数据库中所有视图的正确性的方法,贴出来供大家参考:

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

整个方法定义如下:
///<summary>
///获取所有视图验证结果
///</summary>
///<returns></returns>
publicstaticDataTableGetReFreshView()
{
stringsql="selectnamefromsys.views";

using(SqlConnectionconn=SqlConn())
{
conn.Open();
using(SqlCommandcmd=InitSqlCommand(conn,sql))
{
DataTabledt=newDataTable();
dt.Columns.Add("message",typeof(string));

DataSetds=Query(cmd);

foreach(DataRowdrinds.Tables[0].Rows)
{
sql=@"
declare@errorvarchar(50)
begintry
execsp_refreshview"+dr["name"].ToString()+"set@error='视图"+dr["name"].ToString()+"验证成功!'endtrybegincatchset@error='视图"+dr["name"].ToString()+"验证失败\r\n'+error_message()endcatchselect@error";
cmd.CommandText=sql;

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

returndt;
}
}
}