如果我的表定义更新了,为什么视图没有更新?

Har*_*rma 4 sql sql-server sql-server-2008

假设我有一个表,定义如下:

CREATE TABLE Test
(
    a INT,
    b INT
)
Run Code Online (Sandbox Code Playgroud)

之后,我在表上创建一个视图:

CREATE VIEW ViewTest
AS
SELECT * FROM Test
Run Code Online (Sandbox Code Playgroud)

之后,当我在视图上运行查询时,它会返回两列,即A & B

并且,稍后我更新表的定义并在其中插入一个新列:

ALTER TABLE Test ADD c INT
Run Code Online (Sandbox Code Playgroud)

但是现在当我运行视图时,它再次返回视图语句,它返回相同数量的列,而不是三列。

我只是想知道为什么?因为我使用了 Select * 语句,所以每次它都应该返回我的整个列。

cod*_*ger 7

当您创建视图时,它将视图定义存储为系统表中的元数据。即使您使用SELECT * FROM它也会存储确切的列名称,例如SELECT a, b FROM

如果您随后更新基表,视图的元数据定义仍然保持不变,因此不会选取任何新列。

您需要删除并重新创建视图或运行sp_refreshview来更新定义