1

ここで、ビット値を varchar に変換しようとします。MS SQL サーバーでこのクエリを試します。

CASE WHEN cast(ISNULL(O.isTerminated,0)as varchar) = 1 THEN 'Yes' ELSE '' END AS   isTerminated.

「varchar 値 'Yes' をデータ型ビットに変換するときに変換に失敗しました」というエラーが発生しています。

これに対する解決策は何でしょう。

4

2 に答える 2

2

エラーは、表示しているステートメントが原因ではなく、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
于 2012-05-14T08:22:03.067 に答える
0

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

あなたのケースステートメントで。エラーを修正しません。詳細を見逃していませんか?

于 2012-05-14T08:23:36.660 に答える