【发布时间】: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”或类似的东西。