View数据如何与普通选择不同?

时间:2016-07-24 05:47:47

标签: sql-server select view union

我面临一个奇怪的情况,这似乎是一个错误!

我有一个视图(比如说vwMyview),其中包含3个从同一个UNIONed表中选择的表:

SELECT c.*, r.ToNodeTitle, r.ToNodeID, r.ActivityDate FROM MYBB.[dbo].[ExContract] c inner join vwNodeStatus r on c.requestid = r.RequestID  where r.ToNodeID = 88 and r.statuscode in (0,1) 
UNION
SELECT c.*, r.ToNodeTitle, r.ToNodeID, r.ActivityDate FROM MYBB.[dbo].[ExContract] c inner join vwNodeStatus r on c.requestid = r.RequestID  where r.ToNodeID = 89 and r.statuscode in (0,1) 
UNION
SELECT c.*, r.ToNodeTitle, r.ToNodeID, r.ActivityDate FROM MYBB.[dbo].[ExContract] c inner join vwNodeStatus r on c.requestid = r.RequestID  where r.ToNodeID = 90 and r.statuscode = 7 

(我知道有更好的方法可以创建此视图)

问题在于上述查询的结果与从视图中简单选择的结果不同。 当我从视图中选择时,ToNodeID的内容将填充ToNodeTitle数据。

有谁知道这会发生什么情况?

1 个答案:

答案 0 :(得分:1)

有时会发生这种情况,特别是当您在视图获取其数据的基础对象中进行DDL更改时。为了缓解这种情况,您可以使用与以前相同的代码发出#include <stdio.h> #define MAX(x,y)(x)>(y)?(x):(y) int main() { int i=10,j=5,k=0; k=MAX(i++,++j); printf("%d %d %d",i,j,k); return 0; } 语句,也可以使用alter view存储过程。

其他代码模块也会出现同样的问题;在这种情况下,请使用sys.sp_refreshview系统过程。