我面临一个奇怪的情况,这似乎是一个错误!
我有一个视图(比如说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数据。
有谁知道这会发生什么情况?
答案 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
系统过程。