【问题标题】:Conversion failed when converting the varchar value 'conference room' to data dype int将 varchar 值“会议室”转换为数据 dype int 时转换失败
【发布时间】:2013-09-20 19:21:45
【问题描述】:

我在下面有以下 SQL (SQL Server 2008),我试图弄清楚为什么我会收到此错误消息。我检查了有问题的“类型”的数据类型,它被设置为 char(50)。条件列仅在一个表中任何想法?

SELECT 
  '' as condition,                                                        
  area,
  type
 FROM d_rooms
 UNION
 SELECT * FROM k_rooms

我也尝试了以下方法,但没有成功...同样的错误消息

cast(type as char(50)) as type

我也试过这个 - 同样的错误

'' AS type --same error

【问题讨论】:

  • 哪些列有k_rooms?它必须与d_rooms 具有相同(包括类型)。
  • 它有相同的列
  • 对不起,我之前错了 - 列不一样 - '条件'只在一个表中
  • 类型为保留字。你应该把括号[类型]

标签: sql sql-server database sql-server-2008 relational-database


【解决方案1】:

UNION 在一起时,列的顺序必须相同,如果 * 不起作用,请明确列出它们:

SELECT 
  condition,                                                        
  area,
  [type]
 FROM d_rooms
 UNION
 SELECT 
  condition = '',                                                        
  area,
  [type] 
FROM k_rooms

更新了假设,如果条件不在两个表中,则需要将其硬编码为 '' 或 NULL。转换问题看起来肯定是没有排列的列的结果。

【讨论】:

  • 山羊请看我的编辑...列实际上不一样
  • 就拿 Goat 的工作,用你的“''作为条件,”代替他的第一个“条件”,
【解决方案2】:

如果两个表中的列确实相同,请尝试以正确的顺序明确说明列,而不是使用SELECT *

SELECT 
  condition,                                                        
  area,
  type
 FROM d_rooms
 UNION
 SELECT 
  condition,                                                        
  area,
  type
 FROM k_rooms

无论如何,这是一个很好的实践。考虑以下场景:

您使用select * 创建一个包含原始查询的存储过程。这可以正常工作一两年,然后向表 k_rooms 添加一列。您的存储过程现在将在运行时中断。

【讨论】:

  • 安倍,请看我的编辑。实际上有一列是不同的
  • 我的回答仍然适用。我认为您的更新没有任何改变。
猜你喜欢
  • 2011-05-01
  • 2011-12-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多