为什么这个强制转换在一个语句中起作用而在另一个语句中不起作用?



这两个查询可以正常工作:

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)

对于任何人来说,为什么第三个不能工作,即使前两个很好?

您正在使用的视图,我猜必须涉及一些多表JOIN(将视图过滤为仅数字sku)或至少具有WHERE子句的单个表。

也很可能在视图查询中涉及一些ISNUMERIC测试。

检查这个错误SQL Server不应该引发不合逻辑的错误,这解释了为什么

将数据类型varchar转换为bigint错误。

会在你最意想不到的时候被触发。

select cast(sku as bigint) from vwbidrecords

单独工作只意味着它对查询3进行了不同的优化。检查两个执行计划,会更清楚。

最新更新