Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL视图出现奇怪的(缓存?)问题(Bug?)_Sql_Sql Server_Tsql_Sql Server 2005 - Fatal编程技术网

T-SQL视图出现奇怪的(缓存?)问题(Bug?)

T-SQL视图出现奇怪的(缓存?)问题(Bug?),sql,sql-server,tsql,sql-server-2005,Sql,Sql Server,Tsql,Sql Server 2005,解决这个问题的方法是将视图作为创建脚本编写,删除视图,然后使用脚本重新创建视图,因此显然视图本身没有问题。然而,我很好奇原因是什么… 我创建了一个这样的模型: 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] FR

解决这个问题的方法是将视图作为创建脚本编写,删除视图,然后使用脚本重新创建视图,因此显然视图本身没有问题。然而,我很好奇原因是什么…

我创建了一个这样的模型:

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\u 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]
今天,我在
AD.dbo.adeemployees\u V
中添加了
ISStatus
列(
Status
以前在那里)

在做出改变后,我做了一个:

SELECT * FROM [Employees_V]
令人惊讶的是,这并没有返回正确的结果
ISStatus
未显示为列标题,而不是用0填充,
iStritoryManager
用新的
ISStatus
值填充


我猜这是某种缓存问题,但我希望能解释一下封面下发生了什么。谢谢

视图的列列表在创建或更改时生成。 如果在视图定义中使用
SELECT*FROm table
,视图的列列表将填充
table
的当前字段列表


向表中添加新列不会更改视图定义,这就是为什么您需要重新创建它以“刷新”它的列。

我认为这就是为什么会有新列的原因,也是为什么通常不赞成在视图或存储过程中使用
select*
。@dotjoe。不恰当的评论。问题中的
create视图
,没有
select*
@GordonLinoff,遗憾的是,它有(因为它在中间,所以混合在一起)。我很肯定他的答案是正确的。我以前从未见过这种情况。@dotjoe。我的道歉。你是对的。我想知道如果你把
*
移动到select的最后会发生什么?你不需要重新创建它
sp_refreshview
也可根据@dotjoe对该问题的评论进行操作。