SQL联合导致“将varchar值转换为int时转换失败”

我试图搜索以前与此相关的文章,但我找不到一个特定于我的情况.而且因为我是堆栈溢出的新手,我无法发布图片所以我会尝试描述它.

我有两个数据集.一个是34行,所有NULL的1列.其他13行,1列varchars.

当我尝试将所有这两者结合在一起时,我得到“将varchar值转换为数据类型int时转换失败”.我不明白为什么我会收到这个错误.我之前已经联合了许多空列和varchar列,在许多其他类型中,我没有得到这个转换错误.任何人都可以提出为什么会出现此错误?

解决方法

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

这很容易复制:

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

Here是对应的SQL Fiddle.

SQL Server使用非常复杂的类型优先级规则来确定联合中的目标类型.但实际上,最好避免使用隐式类型转换.相反,显式地将列转换为您想要的类型.

编辑:

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';

也许你的查询正在做这样的事情.

相关文章

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的...
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中...
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册...
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看...