varchar 値 'hoge' から int データ型に変換できませんでした。

ある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_HOGEHOGE_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