在MS-SQL中更改表时,视图中的列会被替换

Ale*_*kel 4 sql sql-server

我偶尔会被迫使用MS-SQL,所以我对它的了解是基本的.我确信以下问题对于MS-SQL专家来说是件小事,但对我而言,这看起来真的像一个讨厌的bug:

假设我有一个简单的表格,其中包含一个人的姓氏,名字和电子邮件,如下所示:

CREATE TABLE dbo.people
(
lastName varchar(50) NULL,
firstName varchar(50) NULL,
email varchar(50) NULL
)
Run Code Online (Sandbox Code Playgroud)

现在我要创建一个视图,所以我有一些预先连接的字段,如下所示:

CREATE VIEW v_people AS
SELECT
    people.*,
    people.lastName + ' ' + people.firstName AS concatName
FROM people
Run Code Online (Sandbox Code Playgroud)

现在我注意到我忘记了电话号码字段,并改变了原始表格,但只有表格,而不是视图:

ALTER TABLE dbo.people ADD
phone varchar(50) NULL
Run Code Online (Sandbox Code Playgroud)

很酷,也很有效.但是现在发生在视图中的事情非常糟糕:视图字段'concatName'不包含连接的名称,而是电话号码,即使视图字段仍然是相同的数量和名称!

似乎MS-SQL只是移动视图中的数据列而不更新列定义.相当可怕的情况,如果你忘记更新取决于你改变的表的视图...

我是否已经监督了某些事情,或者我是否真的有责任在我添加新的表格列时始终检查/更改所有视图?有没有办法让MS-SQL服务器至少抛出依赖视图的警告?

我注意到如果视图构造如下,它不会发生:

CREATE VIEW v_people AS
SELECT
    people.lastName + ' ' + people.firstName AS concatName,
    people.*
FROM people
Run Code Online (Sandbox Code Playgroud)

但对我来说,这只是一个讨厌的解决方法......

任何提示?

Mar*_*ith 7

您需要sp_refreshview 'YourView'在更改从中选择的表的定义后调用*.