Sql server 2008 为什么在联合查询中,SQL试图将varchar字段转换为int?

Sql server 2008 为什么在联合查询中,SQL试图将varchar字段转换为int?,sql-server-2008,Sql Server 2008,让我先说明一下,我是SQL新手。我必须将我提出的查询分开,它们本身工作正常,但当我使用联合加入它们时,会收到以下错误消息: Conversion failed when converting the varchar value '00-12-070-001' to data type int 奇怪的是,我加入了两个varchar字段。第一个包含总账账号(带数字和破折号),第二个包含字母和数字的零件号 我尝试了多种解决方法,比如使用CASE作为char,为单个查询创建视图,然后将它们合并到一起,

让我先说明一下,我是SQL新手。我必须将我提出的查询分开,它们本身工作正常,但当我使用联合加入它们时,会收到以下错误消息:

Conversion failed when converting the varchar value '00-12-070-001' to data type int
奇怪的是,我加入了两个varchar字段。第一个包含总账账号(带数字和破折号),第二个包含字母和数字的零件号

我尝试了多种解决方法,比如使用CASE作为char,为单个查询创建视图,然后将它们合并到一起,但都没有用!我被难住了,我不明白为什么MS-SQL在将一个varchar字段与另一个varchar字段连接时会尝试将它转换为int

非常感谢您的帮助。为了让我的问题保持简单,我省略了细节,但我很乐意为您提供帮助您解决此问题的任何具体信息。顺便说一句,我使用的是MS-SQL 2008

以下是组合两组结果集的基本规则 使用UNION进行查询:

  • 在所有查询中,列的数量和顺序必须相同

  • 数据类型必须兼容。

参考:

基于此,以下是错误的:

SELECT 1
UNION
SELECT 'a'.
虽然以下是正确的,但是太多了

SELECT 'a'
UNION
SELECT CONVERT(VARCHAR(1),1)
以下是组合两组结果集的基本规则 使用UNION进行查询:

  • 在所有查询中,列的数量和顺序必须相同

  • 数据类型必须兼容。

参考:

基于此,以下是错误的:

SELECT 1
UNION
SELECT 'a'.
虽然以下是正确的,但是太多了

SELECT 'a'
UNION
SELECT CONVERT(VARCHAR(1),1)

可能是因为列顺序不同吗?请发布一些代码。我认为两个查询的结构必须在名称和类型上相同,以便工会正常工作。正如评论和回答中所建议的,您可能在两个查询中的字段编号/顺序有所不同。最好发布您的查询和一些示例数据(或使用sql FIDLE),如果太复杂,请尝试创建一个显示相同错误的简单示例,删除额外的列、不相关的数据等……因为
UNION
的一个分支上的
varchar
列对应于另一个分支上的
int
列。请记住,(不幸的是)union是在结果集中的列位置上定义的,而不是在列名上定义的。如果看不到代码和(可能)表定义,我们就无法提供更多的帮助。可能是因为列顺序不同吗?请发布一些代码。我认为两个查询的结构必须在名称和类型上相同,以便工会正常工作。正如评论和回答中所建议的,您可能在两个查询中的字段编号/顺序有所不同。最好发布您的查询和一些示例数据(或使用sql FIDLE),如果太复杂,请尝试创建一个显示相同错误的简单示例,删除额外的列、不相关的数据等……因为
UNION
的一个分支上的
varchar
列对应于另一个分支上的
int
列。请记住,(不幸的是)union是在结果集中的列位置上定义的,而不是在列名上定义的。如果没有看到代码和(可能的)表定义,我们将无法提供更多的帮助。