SQL Server在删除作为视图一部分的字段时不发出警报



我只是不明白为什么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

您将知道哪个视图需要您的注意

相关内容

最新更新