私のデータベースには、参照整合性の制約を確実にするために役立つ計算列がいくつかあります。私が使用しているLINQ2SQLはデータベースのデフォルト値を理解しないため、デフォルト値の列ではなく計算列を使用します。
私の試みは使用することです
CAST('C' as CHAR(1))
自動的に変換されます
(CONVERT([char](1),'C',0))
SSMSによる。ただし、これにより、NULL可能なCHAR(1)列型になります。
'C'
または(NULLタイプではない)を使用するISNULL(NULL,'C')
と、列はVARCHAR(?)として取得されます。そして、2つを組み合わせて使用ISNULL(NULL,CONVERT([char](1),'C',0))
すると、NULL可能なCHAR(1)に戻ります。
これが必要な理由は2つあります。
計算された列は、外部のCHAR(1)列との関係に参加します。
NULL以外のCHAR(1)は、LINQ2SQLの.NET文字タイプに直接マップされます。
アップデート:
で動作しますISNULL(CONVERT([char](1),'C',0),0)
が、「なぜ」はよくわかりません。ISNULL(..,0)
どちらかといえば、タイプをさらに統一できないようです。
良い説明のある答えがあれば嬉しいです。