日期时间字段在视图中作为整数返回

DFo*_*k42 2 view sql-server-2014

今天我们遇到了一个奇怪的案例,一个执行“select * from table”的视图有几个日期时间字段作为整数返回。这在以前一直有效,直到最近。视图本身并没有强制这些列作为整数返回。

另一个奇怪的事情是重写视图以显式选择所有列会使数据作为日期时间返回。我在想这可能是某种糟糕的缓存计划,但我不确定。

数据错误回撤的罪魁祸首是什么?

Aar*_*and 10

发生这种情况是因为表的定义自上次修改视图以来发生了变化。也许有人更改了一个或多个列,或者表被删除并重新创建了具有不同顺序、不同类型等的列。

  • 临时修复:

    EXEC sys.sp_refreshview N'dbo.viewname';
    
    Run Code Online (Sandbox Code Playgroud)
  • 永久修复:

    • 停止SELECT *在视图中使用(甚至可以考虑始终WITH SCHEMABINDING用于所有视图)。

    • 我在这里写了关于SELECT *症状的博客。

    • 我在博客中介绍了SCHEMABINDING here的好处,其中包括当视图与模式绑定时无法更改表。