遇到一个非常奇怪的问题

2017-07-14 11:18:26
sql大概为:

select * from table where time > '2017-1-1' 出错
select * from table where time > '2016-1-1' 正确 有记录
select * from table where time > '2018-1-1' 正确 无记录

出错信息为:
消息 245,级别 16,状态 1,第 1 行
在将 varchar 值 'A' 转换成数据类型 int 时失败。

有2台服务器,版本是一样的sql2008 r2,只有其中一台会出现这个错误,是什么原因呢。
...全文
361 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
2017-07-18
  • 打赏
  • 举报
回复
没有用到union,条件用了in另一个表中查出来的数据 id in(select id from otable where ...) and time > '2017-1-1' 这样的 不加这个 time > '2017-1-1' 条件 是正确的,一加上就出错
OwenZeng_DBA 2017-07-18
  • 打赏
  • 举报
回复
@Free_Wind22 楼主出来说下情况呢?
shinger126 2017-07-18
  • 打赏
  • 举报
回复
如果查询对象是表,并且time字段为datetime型,那么这3句都不可能出错。最大的可能出错的那台服务器,查询对象为视图或者union出来的派生表,然后time字段没对应好。
zbdzjx 2017-07-17
  • 打赏
  • 举报
回复
之前遇到的类似问题,基本上是有union all,类型不一致,会导致这样的错误出现。
道素 2017-07-17
  • 打赏
  • 举报
回复
这不是你的完整语句吧,你的问题可能是地方最好贴出真是的语句,主要是你的完整条件,可能是每个条件需要进行varchar到int的转换 按照你的描述, A 存在 select * from table where time > '2017-1-1' 的结果集中

select * from table where time > '2016-1-1' 正确  有记录
select * from table where time > '2018-1-1' 正确  无记录
之所以不出错,是因为上面两个结果集中没有A(也就是恰好值都能转换为int)
二月十六 2017-07-14
  • 打赏
  • 举报
回复
引用 5 楼 Free_Wind22 的回复:
查询的是表, time是datetime类型
看看查询的数据对不对劲
二月十六 2017-07-14
  • 打赏
  • 举报
回复
引用 3 楼 z10843087 的回复:
[quote=引用 2 楼 sinat_28984567 的回复:] 提示很明显了,有个值为‘A’的进行了转换成int类型失败报错了……查询的是表还是视图,有没有触发器之类的
select 没有触发器吧。有可能查询的是一个视图。看看视图的定义吧。[/quote] 尴尬了……select确实没有触发器,当时没细想
2017-07-14
  • 打赏
  • 举报
回复
查询的是表, time是datetime类型
吉普赛的歌 2017-07-14
  • 打赏
  • 举报
回复
先贴出你的表结构吧, 要不都是在摸风
OwenZeng_DBA 2017-07-14
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
提示很明显了,有个值为‘A’的进行了转换成int类型失败报错了……查询的是表还是视图,有没有触发器之类的
select 没有触发器吧。有可能查询的是一个视图。看看视图的定义吧。
二月十六 2017-07-14
  • 打赏
  • 举报
回复
提示很明显了,有个值为‘A’的进行了转换成int类型失败报错了……查询的是表还是视图,有没有触发器之类的
  • 打赏
  • 举报
回复
time > '2018-1-1' 后面日期 用convert 转下试试

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧