ある2つのSELECT文を単純にUNION ALL したらこんなメッセージが出てエラったのでメモ。
SQLServer2000です。
サーバー : メッセージ 245、レベル 16、状態 1、行 2 構文エラー。varchar 値 'hoge' から int データ型に変換できませんでした。
UNIONしたSELECT文はVIEWをselectしてるだけなので、viewの中身を見てみる。
CREATE VIEW V_HOGE AS SELECT SEQ AS SEQ , NULL AS HOGE_NAME -- (←)これ , HOGE_ID AS HOGE_ID FROM T_HOGE
CREATE VIEW V_HOGE2 AS SELECT SEQ AS SEQ , HOGE_NAME AS HOGE_NAME , HOGE_ID AS HOGE_ID FROM T_HOGE2
片方(上の例だとV_HOGEのHOGE_NAME)がNULL固定で定義されていたことが原因だった。
この場合、V_HOGE2に合わせた型になるのかと勝手に思っていたけど、 実際は、NULLをint型とみているようなエラーメッセージが出力される。
NULLの値をCASTしてあげたらなんとなく回避出来た…けど、こんなんでいいのだろうか?
CREATE VIEW V_HOGE AS SELECT SEQ AS SEQ , CAST(NULL as VARCHAR(10)) AS HOGE_NAME -- とりあえずcast , HOGE_ID AS HOGE_ID FROM T_HOGE