SQL联合导致“将varchar值转换为int时转换失败”
发布时间:2020-12-12 07:46:03 所属栏目:MsSql教程 来源:网络整理
导读:我试图搜索以前与此相关的文章,但我找不到一个特定于我的情况.而且因为我是堆栈溢出的新手,我无法发布图片所以我会尝试描述它. 我有两个数据集.一个是34行,所有NULL的1列.其他13行,1列varchars. 当我尝试将所有这两者结合在一起时,我得到“将varchar值转换为
我试图搜索以前与此相关的文章,但我找不到一个特定于我的情况.而且因为我是堆栈溢出的新手,我无法发布图片所以我会尝试描述它.
我有两个数据集.一个是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'; 也许你的查询正在做这样的事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sqlserver资源调控期视图
- sql – 处理Oracle中的修订
- 利用Sqlserver的CDC功能实现2张表的同步更新
- SqlServer发送邮件,定时作业
- sql-server – 当@@ IDENTITY没有时,SCOPE_IDENTITY如何返回
- 在SQLServer 2005附加SQLServer 2008数据库异常处理
- sql-server-2008 – SQL Server 2008到SQL Server 2005
- SQL Server 数据库保持数据一致性
- SQLserver中的ANSI_NULLS 和 QUOTED_IDENTIFIER选项
- sql-server – 在数据透视查询中使用变量的SQL Server