データベースは、SQL Server しかよく知らないので、他の製品はどうかわからないけれど、Bitってつかいにくいな、と今まで思っていた。
Management Studio でも、編集画面だと、True、False で現われ、0とか1とか入力すると怒られ、True、Falseで編集しなければならないのに、他の場面では 0,1 で扱わねばならない。
Convert や Cast を使わずに、どれほど正確に Bit として認識してくれるのか、実験してみた。
ストアドプロシージャーの引数に、Bit を設定してみる。こんな風に。
CREATE PROCEDURE TEST1 @a Bit AS SELECT @a
で、引数の @a に色々と渡してみる実験。
当然のことながら、0、1は突破。'0'、'1'でも、問題なし。これくらいは当たり前。しかし、ここからがなかなか賢くて「おおっ」と思わせてくれた。
0以外の数字なら、すべて 1になる。''で囲っても同じだ。大文字と小文字を混在しても、'FaLsE'とか'tRUe'とか、それぞれ0、1と扱ってくれる。
これはやってて知ったのだが、SQL SERVER にも、TRUE、FALSEという予約語のようなものがあるらしく、''で囲わずに、TRUE、FALSEでも認識してくれる。
そして、空文字列の場合…… 0にしてくれる。これはかなり、ありがたい。NULLのときは、NULL。これは当たり前。
つまり、かなり柔軟に受け止めてくれるということだ。'TRUE'、'FALSE'以外の文字列(上記のように、大文字小文字は区別しない)だと、エラーとなる。
たぶん、無理だと思ってやったら、やっぱしだめだったのは、全角の数字。エラーになりました……