1. ホーム
  2. sql

[解決済み] ビューカラムをNOT NULLにする方法

2023-04-25 13:06:43

質問

私は、あるカラムを真か偽だけにしたいビューを作成しようとしています。しかし、私が何をしようとも、SQL Server (2008) は、私のビット列が何らかの形でヌルになりうると信じているようです。

私は "Product" というテーブルを持っており、列 "Status" は次のとおりです。 INT, NULL . ビューでは、Product の各行に対して、Product.Status 列が 3 に等しい場合は BIT 列を true に設定し、それ以外はビット フィールドを false に設定して行を返したいのです。

SQLの例

SELECT CAST( CASE ISNULL(Status, 0)  
               WHEN 3 THEN 1  
               ELSE 0  
             END AS bit) AS HasStatus  
FROM dbo.Product  

このクエリをビューとして保存し、オブジェクトエクスプローラでカラムを見てみると、カラムHasStatusに BIT, NULL . しかし、これは決して NULL であってはなりません。このカラムを強制的に NOT NULL .

もし私が CAST() の周りを CASE と設定すると、カラムは正しく NOT NULL と設定されますが、その後、カラムの型が INT に設定され、それは私が望むものではありません。私はそれを BIT . :-)

どのように解決するのですか?

クエリを少しアレンジすることで、望むものを実現できます。トリックは ISNULL が外側にないと、SQL Server は結果の値が決して NULL .

SELECT ISNULL(CAST(
    CASE Status
        WHEN 3 THEN 1  
        ELSE 0  
    END AS bit), 0) AS HasStatus  
FROM dbo.Product  

私がこれを実際に便利だと思う理由のひとつは、このように ORM を使用していて、結果の値が null 可能な型にマッピングされることを望まない場合です。もしアプリケーションがその値を決してヌルでないと見なすなら、全体的に物事を簡単にすることができます。そうすれば、NULL 例外などを処理するコードを書く必要はありません。