1

这两个查询工作正常:

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)

即使第一个两个很好,为什么第三个不起作用对任何人来说都有意义吗?

4

1 回答 1

3

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

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

查看此错误SQL Server 不应引发不合逻辑的错误,这解释了原因

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

将在您最不期望的时候提出。事实是

select cast(sku as bigint) from vwbidrecords

on its own works仅意味着它对查询3的优化不同。检查两个执行计划,它会变得更清晰。

于 2013-05-11T04:55:25.020 回答