2017-03-12 2 views
0

私はテーブルに計算された `BITカラムを追加しようとしていますが、なぜSQLがNOT NULLでないのかを理解するのは難しいです。私は何か間違っているのですか?これは不可能ですか?非永続化された計算されたBIT列はNOT NULLとしますか?

たとえば、このテーブルを取る:これらの列のいずれかが今までNULLをするために、両方の列DateIsInPastIntDateIsInPastBitについては

CREATE TABLE MyTable (
    SomeDate DATETIME NOT NULL, 
    DateIsInPastInt AS CASE WHEN SomeDate < GETUTCDATE() THEN 1 ELSE 0 END, 
    DateIsInPastBit AS CAST(CASE WHEN SomeDate < GETUTCDATE() THEN 1 ELSE 0 END AS BIT), 
) 

が、それは論理的に不可能です。しかし、SQLは、nullとしてDateIsInPastBitを定義しています

enter image description here

は、私が何かをしないのですか、これは非持続BIT列を計算して、単に可能ではないでしょうか?

答えて

2

これはトータルのハックですが、うまくいくようです。

私は cast自体が明確に値を返すことを考えているようだしない理由を知って興味がある、と述べた
CREATE TABLE MyTable (
    SomeDate DATETIME NOT NULL, 
    DateIsInPastInt AS CASE WHEN SomeDate < GETUTCDATE() THEN 1 ELSE 0 END, 
    DateIsInPastBit AS isnull(cast(
     CASE WHEN SomeDate < GETUTCDATE() THEN 1 ELSE 0 END as bit 
    ), 1) 
) 

。上記のハッキングを行うことで、奇妙なケースや潜在的なバグを避けることができます。

+0

はい、これは実際に機能します!実際には同様のアプローチを試みましたが、 'ISNULL'チェックを' CAST'の中に入れましたが、それでも動作しませんでした。何らかの理由で、私は外部に「CAST」が必要であると考えていました。ありがとう! –

関連する問題