我只是不明白为什么SQL Server在从表中删除列时不会抛出错误,而该列是由View读取的。据我所知,SQL Server拥有这些信息,知道当你从视图中进行选择查询时会读取哪些列/表,所以我认为它不应该让你删除从视图中引用的列,就像它不允许你删除FK引用的列一样。。。对此必须有一个解释,请有人告诉我!非常感谢。
因为您必须要求SQL Server执行此跟踪。该选项称为SCHEMABINDING:
将视图绑定到基础表的架构。指定SCHEMABINDING时,不能以影响视图定义的方式修改基表
同样的选项也可用于用户定义的函数,但遗憾的是,存储过程中没有。
它不是默认设置的-可以构建一个视图,将其表解析为不同用户的不同基表(假设用户有不同的默认模式)
您需要刷新视图。下面是一个刷新数据库上所有视图的脚本:
DECLARE @ViewName AS VARCHAR(255)
DECLARE @tblErrorViews TABLE(ViewName VARCHAR(255))
DECLARE listOfView CURSOR FOR
SELECT [Name] FROM sysobjects
WHERE xtype = 'V'
AND uid = SCHEMA_ID('dbo')
OPEN listOfView
FETCH NEXT FROM listOfView into @ViewName
WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT FROM listOfView INTO @ViewName
print @ViewName
EXEC sp_refreshview @ViewName
END
CLOSE listOfView
DEALLOCATE listOfView
您将知道哪个视图需要您的注意