gpt4 book ai didi

sql - 在 MS-SQL 中更改表时, View 中的列会移位

转载 作者:行者123 更新时间:2023-12-03 02:04:37 29 4
gpt4 key购买 nike

我偶尔被迫使用 MS-SQL,所以我对它的了解很基础。我确信以下问题对于 MS-SQL 专家来说是小菜一碟,但对我来说这看起来确实是一个令人讨厌的错误:

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

CREATE TABLE dbo.people
(
lastName varchar(50) NULL,
firstName varchar(50) NULL,
email varchar(50) NULL
)

现在我要创建一个 View ,以便我有一些预连接字段,如下所示:

CREATE VIEW v_people AS
SELECT
people.*,
people.lastName + ' ' + people.firstName AS concatName
FROM people

现在我注意到我忘记了“电话号码”字段,并更改了原始表格,但仅更改了表格,而不更改了 View :

ALTER TABLE dbo.people ADD
phone varchar(50) NULL

很酷,也有效。但是现在 View 发生的情况非常可怕: View 字段“concatName”不包含连接的名称,而是包含电话号码,即使 View 字段的数量和名称仍然相同!

看起来 MS-SQL 只是在 View 中移动数据列,而不更新列定义。这是非常可怕的情况,如果您忘记更新取决于您更改的表的 View ...

我是否监督过某些事情,或者如果我只是添加新的表列,我真的有责任始终检查/更改所有 View 吗?有没有办法让 MS-SQL 服务器至少发出有关依赖 View 的警告?

我注意到,如果 View 是这样构造的,则不会发生这种情况:

CREATE VIEW v_people AS
SELECT
people.lastName + ' ' + people.firstName AS concatName,
people.*
FROM people

但对我来说,这看起来像是一个令人讨厌的解决方法......

有什么提示吗?

最佳答案

在更改使用 * 选择的表的定义后,您需要调用 sp_refreshview 'YourView'

关于sql - 在 MS-SQL 中更改表时, View 中的列会移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122616/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com