Accessのブールデータ型(Jet/ACEなど)は、Trueの場合は-1、Falseの場合は0を返します。フィールドは常に必須です(つまり、NULLに設定できません)。 SQL ServerのBITタイプは、Trueの場合は1、Falseの場合は0を返し、NULLも許可します。
Jet/ACE BOOLEANデータ型の機能を複製するために、smallint、チェック制約、およびNOT NULLの組み合わせを使用したT-SQL列定義を探しています。つまり、列は値0と-1のみを受け入れます。
BITに関する懸念に対処するには:
CREATE TABLE dbo.foo(bar BIT NOT NULL, blat BIT NOT NULL);
INSERT dbo.foo SELECT -1, 0;
SELECT bar, blat, -CONVERT(SMALLINT, bar), -CONVERT(SMALLINT, blat) FROM dbo.foo;
結果:
bar blat
---- ---- ---- ----
1 0 -1 0
TINYINT/SMALLINTよりもBITの優れている点は、1〜8個のBITカラムがある場合、それらが1バイトに収まることです。
これらすべてのケースで、あなたはまだ言うことができないでしょう
WHERE NOT BooleanColumn
-- or
WHERE !BooleanColumn
あなたはまだ言う必要があります
WHERE BooleanColumn = 0
これはそれを行います:
MyField smallint NOT NULL CONSTRAINT MyField_YesNo CHECK (MyField = 0 OR MyField = -1)