回答

收藏

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

技术问答 技术问答 105 人阅读 | 0 人回复 | 2023-09-12

我试图搜索以前的文章,但我找不到适合我情况的文章。因为我是StackOverflow新手,所以我不能发布图片,所以我会试着描述它。% J3 r( E/ m6 ^& ]
我有两个数据集。一个是34行,占所有NULLs1列。其他13行,其中1列为varchars。
; H# h7 i# K4 i  e1 ]1 C$ a同时试试UNION ALL这两个时候,出现了以下错误:
+ p  B- z$ j+ N5 n7 h) C0 K将varchar值转换为int在数据类型中,转换失败。' B- Y  B# R- @% T- r$ d6 {4 F
我不明白为什么会收到这个错误。UNION编辑过许多NULL列和varchar许多其他类型的列,但没有得到这种转换错误。3 X) k- s$ T7 J& u! @" O
为什么会出现这个错误,谁能提出建议?" V1 W& a+ Z4 N9 J
                                                               
0 Y6 W. }# U! K' E4 ^, g3 ?    解决方案:                                                                # P( {& f5 Q, k* `& J
                                                                错误是因为你在两个子查询中都有相应的列,一个是整数,另一个是字符。然后,字符值至少有一个值不能自动转换为整数。
# P/ Z) C/ `) _9 W- `9 h$ W  ~1 Q5 K& o易于复制:1 e  R  O! I7 T
select t.*from (select 'A' as col union all      select 1     ) t;这是相应的SQL Fiddle。9 |8 h: t. o1 q
SQL4 o& K! M+ v/ }, [" `1 @+ y2 S
Server使用相当复杂的类型优先级规则来确定.NET目标类型union。但实际上,最好避免使用隐式类型转换。而是将列显式转换为所需类型。
9 m1 d& `' e. r编辑:
& ~8 [2 M) t9 S( R7 s4 o有NULL价值观非常复杂。就其本身而言    ,该NULL值没有类型。因此,以下工作正常:' M+ Q2 c7 a) a$ _- x
select NULL as colunion allselect 'A';如果键入NULL,查询失败:; \2 C- R1 o4 O
select cast(NULL as int) as colunion allselect 'A';另外,如果将SQL Server放置在必须分配类型的位置,SQL
$ b$ N) I5 b, X+ O" F. hServer将使该NULL整数成为整数。表或结果集中的每一列都需要一种类型,因此也会失败:
+ h1 p, c2 y9 l, mselect (select NULL) as colunion allselect 'A';也许你的查询正在做这样的事情。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则