2

次のようにビューを変更したい:

ALTER VIEW [dbo].[ViewOne] as  
SELECT columnOne,  -- not null  
       columnTwo, --not null
      (convert(decimal(2,0), columnOne)) as columnThree -- I want this not to be NULL
FROM DBOne.TableOne

columnOne は「非 null」であるため、columnThree も「非 null」に強制したいと考えています。columnOne はアルガリズムのみが取り込まれた char(2) であるため、可能、不可能、暗黙的、役に立たない、または深刻な問題を引き起こす可能性があります。

私は単に構文を知りたいです

4

4 に答える 4

4

column1がNOTNULLに制約されている場合、column3をNULLにすることはできないため、心配する必要はありません。

于 2010-08-04T15:23:42.730 に答える
4

ISNULL()null の場合のデフォルト値を確保するために使用できます。

ALTER VIEW [dbo].[ViewOne] as   
SELECT columnOne,  -- not null   
       columnTwo, --not null 
      ISNULL((convert(decimal(2,0), columnOne)),0.00) as columnThree
FROM DBOne.TableOne 
于 2010-08-04T15:18:58.537 に答える
4

Cast のソース自体が決して null でない場合、ColumnThree は決して null になりません。ただし、これは、ColumnOne をキャストできない場合に例外が発生しないという意味ではなくdecimal(2,0)、ビューに対してクエリを実行するまで例外が発生するかどうかはわかりません。キャストが失敗するかどうかを判断し、キャスト エラーの可能性を軽減するために、追加のチェックを追加することを検討する必要があります。

Alter View dbo.ViewOne
As
Select ColumnOne, ColumnTwo
    , Case
        When IsNumeric( ColumnOne ) = 0 Then 0
        Else Cast( ColumnOne As decimal(2,0) )
        End As ColumnThree
于 2010-08-04T15:37:54.440 に答える
0

どのように適用するかは、ビジネス ルールによって異なります。

これらの行がビューの結果に表示されないようにしますか? 次に、その基準をビューの WHERE 句に追加します。

列が NULL になる場合にデフォルト値を使用しますか? 次に、COALESCE を使用して NULL のデフォルト値を返します (列にエイリアスを付けることを忘れないでください)。

そのようなことを引き起こす行が基になるテーブルに挿入された場合にエラーを返したいですか? その場合、基になるテーブルに制約を設定します。ビューに JOIN と集計が含まれている場合、それは難しいかもしれませんが、具体的な例がなければ、私はそれを実際に助けることはできません.

いずれにしても、特定の例では、columnOne が NULL ではないため、NULL 値は表示されません。

于 2010-08-04T15:31:43.427 に答える