微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UNION导致“将varchar值转换为int时,转换失败”

如何解决UNION导致“将varchar值转换为int时,转换失败”

发生错误是因为您在两个子查询中都有对应的列,其中一个的类型是整数,另一个的类型是字符。然后,字符值至少在一行中具有一个不能自动转换为整数的值。

这很容易复制:

select t.*
from (select 'A' as col union all
      select 1
     ) t;

是相应的sql fiddle

sql Server使用相当复杂的类型优先级规则来确定.NET中的目标类型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';

也许您的查询正在做这样的事情。

解决方法

我尝试搜索与此相关的以前的文章,但是找不到适合我情况的文章。而且由于我是StackOverflow的新手,所以我无法发布图片,所以我将尝试对其进行描述。

我有两个数据集。一个是34行,占所有NULLs的1列。其他13行,其中1列为varchars。

当我同时尝试UNION ALL这两个时,出现以下错误:

将varchar值转换为int数据类型时,转换失败。

我不明白为什么会收到此错误。我之前UNION编辑过许多NULL列和varchar许多其他类型的列,但没有得到此转换错误。

谁能提供建议为什么会发生此错误?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。