首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UNION导致“将varchar值转换为int时转换失败”

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

Stack Overflow用户
提问于 2014-08-19 06:43:54
回答 1查看 15.7K关注 0票数 6

我试图搜索以前与此相关的文章,但我找不到一篇针对我的情况的文章。因为我是StackOverflow的新手,所以我不能发布图片,所以我会试着描述它。

我有两个数据集。一个是34行,1列的所有NULL。另外13行,1列的varchar

当我尝试将这两个命令UNION ALL在一起时,我得到以下错误:

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

转换失败。

我不明白为什么我会得到这个错误。在许多其他类型中,我以前UNION过许多NULL列和varchar列,我没有得到这个转换错误。

有没有人能给出这个错误发生的原因?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-19 06:58:07

出现该错误的原因是,在两个子查询中有相应的列,其中一个子查询的类型是整数,另一个子查询的类型是字符。然后,字符值至少在一行中有一个不能自动转换为整数的值。

这很容易复制:

代码语言:javascript
复制
select t.*
from (select 'A' as col union all
      select 1
     ) t;

Here是对应的SQL。

SQL Server使用非常复杂的类型优先规则来确定union中的目标类型。但在实践中,最好避免使用隐式类型转换。相反,应将列显式转换为您想要的类型。

编辑:

NULL值的情况很复杂。NULL值本身没有类型。因此,下面的代码运行得很好:

代码语言:javascript
复制
select NULL as col
union all
select 'A';

如果键入NULL,则查询将失败:

代码语言:javascript
复制
select cast(NULL as int) as col
union all
select 'A';

此外,如果您将SQL Server置于必须为其分配类型的位置,则SQL Server将使NULL成为整数。表或结果集中的每一列都需要一个类型,因此这也将失败:

代码语言:javascript
复制
select (select NULL) as col
union all
select 'A';

也许您的查询是这样做的。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25373180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档