ビットデータ型の概要
データ型は、整数、文字、データ時間、バイナリデータを格納する属性を表します。さまざまな質問に対するユーザーのフィードバックを記録するためのWebアプリケーションがあるとします。複数の二分された質問と、コメントなどのテキストボックスベースの質問がいくつか含まれています。バックエンドでは、これらの応答はSQLテーブルに格納されます。
テーブルを設計するために、列とデータベースフィールドタイプを定義します。 SQL Serverは、integer、char、varchar()、float、DateTime、numericなどのさまざまなデータ型をサポートしています。同じことがT-SQLデータ型にも適用できます。データ型の詳細については、公式ドキュメントを参照してください。ユースケースは、それらに格納したい値によって異なります。
作成したテーブルに特定の列があるとします。これらの列は、ブール値1,0またはTRUE\Falseを受け入れます。 SQL。したがって、SQL Serverでは、特定のブールデータ型–ビット 提供されます。
SQL Serverビットは、0、1、およびNULL値を受け入れる整数データ型です。これは、Azure SQL Server、Azureマネージドインスタンス、およびAzureVM上のSQLを含むすべてのSQLServerバージョンで利用できます。
ビットデータ型ストレージ
ストレージに関しては、ビットデータ型はSQLServerによって最適化されます。テーブルに8つ以下のビット列がある場合、SQLServerはそれらを1バイトとして格納します。同様に、9〜16ビット列の場合、2バイトを消費します。さらに、SQLServerは文字列値TRUEとFALSEを対応する値1と0に変換します。
構文
SQLServerのBITデータ型の構文は単純です。
Bit
ビットデータ型の実用化
次のT-SQLスクリプトは、製品テーブルを作成し、それに2つの製品データ値を挿入します。
- 製品が利用可能な場合、[Available]列のビットは1に設定されます。
- 製品が利用できない場合、[Available]列のビットは0に設定されます。
CREATE TABLE Products (
[ProductName] varchar(20),
[Available] BIT
);
Go
INSERT INTO Products (productname,available) values('A',1)
INSERT INTO Products (productname,available) values('B',0)
GO
SELECT * FROM Products
[Products]テーブルを切り捨てて、TRUE文字列とFalse文字列を使用してその値を挿入しましょう。
TRUNCATE TABLE Products
INSERT INTO Products (productname,available) values('A','TRUE')
INSERT INTO Products (productname,available) values('B','False')
GO
SELECT * FROM Products
以下に示すように、SQL Serverは文字列TRUEを1に、Falseを0に変換します。
ただし、[はい]や[いいえ]などの他の値をビットデータ型に挿入しようとすると、「変換に失敗しました」というエラーメッセージが表示されます。
INSERT INTO Products (productname,available) values('A','Yes')
ゼロ以外の値を[ビットデータ型]列に挿入すると、SQLServerはその値を1に変換します。たとえば、次のスクリプトでは、[available]列に値100を挿入します。その間、エラーメッセージは発生しません。
レコードを選択すると、挿入された値が1であることを検証します。
INSERT INTO Products (productname,available) values('A',100)
SELECT * FROM Products;
同様に、SQL Serverは、ビット列で負の値を値1に変換します。以下に示すように、[使用可能]列に値-100を挿入します。取得中に値1を受け取ります:
INSERT INTO Products (productname,available) values('A',-100)
SELECT * FROM Products;
以前は、製品の可用性を確認するためにビットデータ型を使用していました。通常、ビット1と0ではなくフロントエンドにテキストを表示する必要があります。したがって、SQLServerでCASEステートメントを使用できます。
次のT-SQLコードでは、CASEステートメントは次を返します。
- 値1:製品が利用可能です
- 値0:在庫切れ
SELECT [ProductName], CASE [Available]
WHEN 1 then 'Product is available.'
WHEN 0 then 'Out of Stock'
ELSE 'NA'
END AS [Availability]
from products
前に見たように、SQLServerはビットデータ型のストレージを最適化します。次の[TestTable]には、ビットデータ型の8つの列があります。したがって、ストレージに1バイトを使用します。
CREATE TABLE TestTable (
[Column1] Bit,
[Column2] Bit,
[Column3] Bit,
[Column4] Bit,
[Column5] Bit,
[Column6] Bit,
[Column7] Bit,
[Column8] Bit,
);
または、 tinyintを使用する場合 またはChar(1)データ型 、各列に1バイトを消費します。ブール値が必要なのに対し、ビットデータ型を使用する必要があります。
ブール値を返すストアドプロシージャまたは関数でビットデータ型を使用することもできます。たとえば、 fn_customer()があります。 顧客IDをチェックし、存在する場合は値を返し、それ以外の場合は0を返す関数。
CREATE FUNCTION fn_customer
(
@CustomerID INT
)
RETURNS bit
AS
BEGIN
IF EXISTS (
SELECT [CustomerID] FROM [SalesLT].[Customer]
WHERE [CustomerID][email protected]
)
RETURN 1
RETURN 0
END
この関数には、入力パラメーターとして顧客IDが必要です。顧客ID10で実行すると、次のメッセージが表示されます。
IF (dbo.fn_customer(10)=1)
PRINT 'Customer record is available'
ELSE
PRINT 'Customer record is not available'
ただし、顧客IDが[SalesLT]。[Customer]に存在しない場合 テーブルの場合、関数は値0を返します。IFブロック条件は真ではありません。したがって、ELSE句で指定されたメッセージが表示されます。
結論
MSSQLブールデータ型-ビットデータ型は、値0、1、またはNULLを受け入れる列に役立ちます。 SQL Serverは、ビットデータ型ストレージを最適化します。したがって、コードがコンパクトで効率的になります。同様に、これを使用して、ストアドプロシージャまたは関数からブール値を返すことができます。
また読む
初心者向けのSQLCOALESCE関数を使用したNULL値の効果的な処理