【发布时间】:2013-05-11 00:20:27
【问题描述】:
这两个查询工作正常:
select cast(sku as bigint) from bid
select cast(sku as bigint) from vwbidrecords
此查询失败并显示消息“将数据类型 varchar 转换为 bigint 时出错。”
select * from bid where cast(sku as bigint) in
(select cast(sku as bigint) from vwbidrecords)
任何人都知道为什么即使第一个两个很好,第三个也不起作用?
【问题讨论】:
-
每个表中
sku字段的数据类型是什么? (这并不重要) -
乍一看不是。但是,当您可以直接比较它们时,将 sku 转换为 bigint 也是没有意义的,并且使用这样的 IN 子句而不是内部连接也没有意义。不判断;只是说。
-
前两个查询是否真的如图所示工作,即针对表中的每一行?
-
你能用sqlfiddle重现这个问题吗?
-
从你的代码中可以推断出 sku 列的类型是 varchar。那么在这种情况下,不,这根本没有意义,除非 sku 中有一些无法转换为 bigint 的 tupes,在这种情况下,您的前两个查询中的任何一个都必须失败。
标签: sql sql-server-2008 casting