我试图搜索以前与此相关的文章,但我找不到一篇针对我的情况的文章。因为我是StackOverflow的新手,所以我不能发布图片,所以我会试着描述它。
我有两个数据集。一个是34行,1列的所有NULL
。另外13行,1列的varchar
。
当我尝试将这两个命令UNION ALL
在一起时,我得到以下错误:
将varchar值转换为数据类型int时,
转换失败。
我不明白为什么我会得到这个错误。在许多其他类型中,我以前UNION
过许多NULL
列和varchar
列,我没有得到这个转换错误。
有没有人能给出这个错误发生的原因?
发布于 2014-08-19 06:58:07
出现该错误的原因是,在两个子查询中有相应的列,其中一个子查询的类型是整数,另一个子查询的类型是字符。然后,字符值至少在一行中有一个不能自动转换为整数的值。
这很容易复制:
select t.*
from (select 'A' as col union all
select 1
) t;
Here是对应的SQL。
SQL Server使用非常复杂的类型优先规则来确定union
中的目标类型。但在实践中,最好避免使用隐式类型转换。相反,应将列显式转换为您想要的类型。
编辑:
NULL
值的情况很复杂。NULL
值本身没有类型。因此,下面的代码运行得很好:
select NULL as col
union all
select 'A';
如果键入NULL
,则查询将失败:
select cast(NULL as int) as col
union all
select 'A';
此外,如果您将SQL Server置于必须为其分配类型的位置,则SQL Server将使NULL
成为整数。表或结果集中的每一列都需要一个类型,因此这也将失败:
select (select NULL) as col
union all
select 'A';
也许您的查询是这样做的。
https://stackoverflow.com/questions/25373180
复制相似问题