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 * 语句,所以每次它都应该返回我的整个列。
当您创建视图时,它将视图定义存储为系统表中的元数据。即使您使用SELECT * FROM它也会存储确切的列名称,例如SELECT a, b FROM
如果您随后更新基表,视图的元数据定义仍然保持不变,因此不会选取任何新列。
您需要删除并重新创建视图或运行sp_refreshview来更新定义