ここで、ビット値を varchar に変換しようとします。MS SQL サーバーでこのクエリを試します。
CASE WHEN cast(ISNULL(O.isTerminated,0)as varchar) = 1 THEN 'Yes' ELSE '' END AS isTerminated.
「varchar 値 'Yes' をデータ型ビットに変換するときに変換に失敗しました」というエラーが発生しています。
これに対する解決策は何でしょう。
ここで、ビット値を varchar に変換しようとします。MS SQL サーバーでこのクエリを試します。
CASE WHEN cast(ISNULL(O.isTerminated,0)as varchar) = 1 THEN 'Yes' ELSE '' END AS isTerminated.
「varchar 値 'Yes' をデータ型ビットに変換するときに変換に失敗しました」というエラーが発生しています。
これに対する解決策は何でしょう。
エラーは、表示しているステートメントが原因ではなく、isTerminated
後でエイリアスを使用したことが原因です。
そのままのステートメントはエラーをスローしません。
DECLARE @isTerminated BIT = 1
SELECT CASE WHEN CAST(ISNULL(@isTerminated, 0) AS VARCHAR) = 1
THEN 'yes'
ELSE ''
END AS isTerminated
ただし、エイリアスisTerminated
を a のように扱いbit
ます。
DECLARE @isTerminated BIT = 1
SELECT *
FROM (SELECT CASE WHEN CAST(ISNULL(@isTerminated, 0) AS VARCHAR) = 1
THEN 'yes'
ELSE ''
END AS isTerminated) t
WHERE isTerminated = 1 -- isTerminated is a VARCHAR at this point
bit
を にキャストするのはなぜですかvarchar
。これを行うことができますか:
CASE WHEN ISNULL(O.isTerminated,0) = 1 THEN 'Yes' ELSE '' END AS isTerminated
編集
この例を試すとき。
DECLARE @T TABLE(isTerminated BIT)
INSERT INTO @T
VALUES(1),(NULL),(0)
SELECT
CASE WHEN ISNULL(O.isTerminated,0) = 1 THEN 'Yes' ELSE '' END AS isTerminated
FROM
@T AS O
あなたのケースステートメントで。エラーを修正しません。詳細を見逃していませんか?