4

以下のようなストアドプロシージャがあります。

SELECT @AdminApproved = CASE WHEN @AdminApprovalDate IS NULL
    THEN 0 
    ELSE 1
    END  

私が理解しているように、CASEステートメント@AdminApprovedは 0 または 1 以外であってはなりません。NULL になる可能性はありません。それでも私はNULLを取得しています!!!! 誰でも同じことで私を助けることができますか?

4

3 に答える 3

7

Your example code works

According to SQL Fiddle this works. It's either set to 0 or 1. So if you're using exactly the code you're showing us this variable can't be null.

declare @AdminApproved1 bit
declare @AdminApproved2 bit
select @AdminApproved1 = case when (null) is null then 0 else 1 end,
       @AdminApproved2 = case when (getdate()) is null then 0 else 1 end

-- both have values
select @AdminApproved1, @AdminApproved2;

But variable can still be null

So if your code example isn't complete then I can show you another example where both upper variables would be null even after executing select statement. And I suspect that your problem is related.

declare @AdminApproved1 bit
declare @AdminApproved2 bit
select @AdminApproved1 = CASE WHEN (null) IS NULL THEN 0 ELSE 1 END,
       @AdminApproved2 = CASE WHEN (getdate()) IS NULL THEN 0 ELSE 1 END
from SomeTable
where 0 = 1 -- this query yields no results

-- both are NULL when
select @AdminApproved1, @AdminApproved2;
于 2013-03-21T12:24:35.017 に答える
0

で値を割り当てると、選択内で行が返されない場合、割り当て前の元の値SELECT保持されます。(実際には、値がNULL保存された値になるというのは真実ではありません。

行を返さない割り当てで値が に設定されるのは、SET の場合のみNULLです。

したがって、特別なケースでは、値の前の値は NULL であり (値を割り当てなかったため)、select は返されませんでした。

于 2013-03-21T12:34:36.880 に答える
0

そのクエリから null を取得することはできないため、コードの別の場所に何か問題があるはずです。そのクエリがまったく実行されないようにする何かがある可能性があります。

結果を検証するためのテスト:

declare @AdminApproved int
declare @AdminApprovalDate datetime

-- testing with null

set @AdminApprovalDate = null

SELECT @AdminApproved = CASE WHEN @AdminApprovalDate IS NULL
    THEN 0 
    ELSE 1
    END

select @AdminApproved

-- testing with a date

set @AdminApprovalDate = getdate()

SELECT @AdminApproved = CASE WHEN @AdminApprovalDate IS NULL
    THEN 0 
    ELSE 1
    END

select @AdminApproved

出力:

0

1
于 2013-03-21T12:31:05.567 に答える