当前位置: 首页 > 面试题库 >

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

谢誉
2023-03-14
问题内容

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

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

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

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

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

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


问题答案:

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

这很容易复制:

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

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



 类似资料:
  • 问题内容: 我创建了一个过程并收到了此消息 将varchar值’%’转换为数据类型int时,转换失败。 我不知道这可能是什么,但是当我将过程更改为这样时: 似乎工作正常。我是SQL的新手,所以可以得到任何帮助,也许有更好的方法来做我想做的事情? 问题答案: 这是在子句中: 是一个整数。因此,您需要将其转换为字符串: 为什么要使用称为的列是可疑的。也许您只想要:

  • 问题内容: 尝试运行SQL查询时出现此错误… 将varchar值’Id’转换为数据类型int时转换失败 请帮我 :( 问题答案: 在您的情况下,请确保一列是类型,另一列是类型。 由于优先级高于,因此列将隐式转换为 因此,将列明确转换为varchar。 我已经考虑了如果不是的类型,然后转换为

  • 问题内容: 我在下面的查询中,需要转换为 架构图 我尝试了什么 但它们不起作用。请提出建议。 问题答案: 您将需要或作为数据类型,没有可以将数据强制转换/转换为以下数据的数据类型: 请参阅下面的SQL(实际上)在SQL Fiddle中 : 除了您试图转换为不正确的数据类型外,您所使用的语法也不正确。该函数使用以下列或值: 要么 您的原始查询的语法向后。

  • 问题内容: 我试图在我的数字列中附加一些alphabt来获取记录。但即时通讯收到错误,我尝试了强制转换和转换功能。 例如 这里StandardCost是一个数字字段,但是当我获取记录时遇到错误,请看看。 问题答案: 我认为应该 或者

  • 问题内容: 我在代码隐藏中收到转换失败的错误。我的代码如下: 我收到以下错误: 将nvarchar值转换为数据类型int时,转换失败。 在这里必须进行哪些更改? 问题答案: 我想这是一个整数,但您正在分配一个字符串。因此,这可能会解决它: 编辑:由于您已评论该会话存储了用户名,但该列是一个int列,因此您有三个选择: 更改会话以存储用户标识而不是名称 更改列以存储用户名 从存储用户名的表中选择用户