通过将视图编写为create,删除视图,然后使用脚本重新创建视图来解决此问题,因此很明显,视图本身没有任何错误。但是,我很好奇原因是什么......
我创建了这样的:
CREATE VIEW [dbo].[Employees_V]
AS
SELECT cast(right(EmployeeNo,4) as int) as EmployeeID
,*
,cast(0 as bit) AS [IsTerritoryManager]
,cast(0 as bit) AS [IsCoordinator]
FROM AD.dbo.ADEmployees_V
AD.dbo.ADEmployees_V
有许多不同的字段,但相关字段为Status
和ISStatus
,在视图创建中定义为:
,CASE WHEN c.[Status] = 'Active' THEN 'Active' ELSE 'Terminated' END AS [Status]
,CASE WHEN c.[Status] = 'Active' OR ad.[AccountStatus] LIKE '%Enabled%' THEN 'Active' ELSE 'Terminated' END AS [ISStatus]
今天,我将ISStatus
列添加到AD.dbo.ADEmployees_V
(之前有Status
)。
在做出改变之后,我做了一个:
SELECT * FROM [Employees_V]
令人惊讶的是,这并没有返回正确的结果。 ISStatus
未显示为列标题,而是使用新的IsTerritoryManager
值填充ISStatus
,而不是使用0填充{/ 1}}。
我猜这是某种缓存问题,但我会爱解释发生了什么事情。谢谢!
答案 0 :(得分:1)
视图的列列表是在CREATE或ALTER时生成的。
如果您在视图定义中使用SELECT * FROm table
,则视图的列列表将填充table
的当前字段列表。
向表中添加新列不会更改视图定义,这就是为什么需要重新创建它以“刷新”它的列。