【问题标题】:Select query produces SqlDateTime overflow on valid dates选择查询在有效日期产生 SqlDateTime 溢出
【发布时间】:2016-05-20 19:27:46
【问题描述】:

我有一个问题:在像SELECT * FROM table这样的简单选择上,随机返回 SqlDateTime 溢出错误(在返回该错误后它几次正常工作;之后它再次工作几次,然后再次返回该错误) -错误发生在同一行(同时使用相同的连接) - 如果我打开和关闭 MGMT Studio,错误会发生在不同的行上。

确切的错误信息是:

执行批处理时出错。错误消息是:SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 之间 下午。

表有 3 个日期时间列:

  • DTcolumn1 - 可以为空,没有默认值
  • DTcolumn2 - 不能为空,默认值 ('1800-01-01')
  • DTcolumn3 - 可以为空,没有默认值

所有 3 个 DateTime 列中的值看起来都很好(null 或在允许的间隔内)。

Table 也有一些其他列的 varchar 和其他类型。如果我按这 3 个 DateTime 列之一添加顺序(经过经验测试),则选择查询更有可能失败。

数据库的排序规则是Slovenian_CI_AI

是什么导致了这个错误(正如我所说的 - DateTime 值似乎没问题)?

提前谢谢你!

EDIT 1 (2016-05-09):我之前忘了提:SQL MGMT Studio 和代码(使用 LINQ to SQL)发生错误。

EDIT 2 (2016-05-10):似乎存在不同的问题 - 在每张表上都有超过 10000 条记录,它会引发一些愚蠢的错误。在它抛出的其他桌子上:

执行批处理时出错。错误信息是:内部 连接致命错误。`

它还会断开我与数据库的连接(在底部状态行中显示 disconnected)。 SQL 服务器安装在本地网络内的远程服务器上。

【问题讨论】:

  • “错误总是发生在同一行” 哪一行? SELECT * FROM table 不是您的原始查询。显示出来。
  • 发生错误时总是返回相同的前十行。
  • 您真正的查询是什么,因为它不是SELECT * FROM table。你使用过滤器吗?
  • 当它像那样溢出时,通常表明某处的日期时间被作为字符串处理。触发器?意见?等等?
  • @TimSchmelter:表的意思是表名。它也可以是“SELECT * FROM people”或类似的东西。

标签: sql-server sqldatetime


【解决方案1】:

我们的管理员发现问题出在 DNE LightWeight Filter 上。如果这个怪物被禁用,一切都会按预期运行(不会出现奇怪错误的随机断开连接)。

如果您转到控制面板/网络和共享中心/更改适配器设置,您可以禁用它。右键单击您的网络设备并选择属性。取消选择DNE LightWeight Filter

Link to Server Fault, where I posted the question when we started to believe that this is network related problem.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多