0

以下の SQL (SQL Server 2008) があり、このエラー メッセージが表示される理由を理解しようとしています。問題の「タイプ」のデータ型を確認したところ、char(50) として設定されています。状態の列は 1 つの表にのみあります。何かアイデアはありますか?

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

2 つのテーブルの列が実際に同じである場合は、を使用する代わりに、列を正しい順序で明示的に記述してみてくださいSELECT *

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

とにかく、これは良い習慣です。次のシナリオを検討してください。

を使用して、元のクエリを含むストアド プロシージャを作成しますselect *。これは 1 年か 2 年は問題なく動作し、その後、テーブル k_rooms に列を追加します。ストアド プロシージャは実行時に壊れます。

于 2013-09-20T19:25:06.223 に答える