为什么这个演员在一个陈述而不是另一个陈述中工作?

时间:2013-05-11 00:20:27

标签: sql sql-server-2008 casting

这两个查询工作正常:

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)

对于任何人来说,即使前两个没有问题,为什么第三个不能正常工作?

1 个答案:

答案 0 :(得分:3)

你正在使用一个视图,我猜这个视图必须包含一些多表JOIN(将视图过滤到只有数字SKU)或至少一个带有WHERE子句的表。

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

查看此错误SQL Server should not raise illogical errors,解释原因

  

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

会在您最不期望的时候提出。

的事实
select cast(sku as bigint) from vwbidrecords

在它自己的工作上只意味着它与查询3的优化不同。检查两个执行计划,它将变得更加清晰。