0

我在下面有以下 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
4

2 回答 2

1

当您将它们放在一起时,这些列必须以相同的顺序排列UNION,如果 * 不起作用,请明确列出它们:

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

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

于 2013-09-20T19:24:46.693 回答
0

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

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

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

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

于 2013-09-20T19:25:06.223 回答