我们今天遇到了一个奇怪的案例,其中执行“select * from table”的视图有几个日期时间字段作为整数返回。直到最近,这一直在起作用。这些在视图本身中并没有强制这些列作为整数返回。
另一件奇怪的事情是,重写视图以明确选择所有列会使数据作为日期时间返回。我在想这可能是某种糟糕的缓存计划,但我不确定。
数据回传不正确的罪魁祸首是什么?
我们今天遇到了一个奇怪的案例,其中执行“select * from table”的视图有几个日期时间字段作为整数返回。直到最近,这一直在起作用。这些在视图本身中并没有强制这些列作为整数返回。
另一件奇怪的事情是,重写视图以明确选择所有列会使数据作为日期时间返回。我在想这可能是某种糟糕的缓存计划,但我不确定。
数据回传不正确的罪魁祸首是什么?
发生这种情况是因为自上次修改视图以来表的定义已更改。也许有人更改了一个或多个列,或者该表被删除并使用不同顺序、不同类型等的列重新创建。
临时修复:
永久修复:
停止
SELECT *
在视图中使用(甚至可能考虑始终WITH SCHEMABINDING
对所有视图使用)。我在这里
SELECT *
写了关于症状的博客。SCHEMABINDING
here的好处,其中包括当视图绑定到表时无法更改表。