web-dev-qa-db-ja.com

Access BOOLEAN型に相当するSQL Serverの列定義

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のみを受け入れます。

6
mwolfe02

BITに関する懸念に対処するには:

  1. BIT列をNOT NULLに設定できます。
  2. setting BITカラムが「true」の場合、-1を使用できます。
  3. -1に変換するビューを作成できますが、アプリケーションが明示的に数値-1をチェックしない限り、とにかく+1で問題ありません(クライアント言語ではゼロ以外はtrueになるはずです)。
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
4
Aaron Bertrand

これはそれを行います:

MyField smallint NOT NULL CONSTRAINT MyField_YesNo CHECK (MyField = 0 OR MyField = -1)
2
mwolfe02