2016-09-28 12 views
2

bitデータ型を使用する列があります。エンドユーザーはN/Aオプションを望んでいますので、前に "はい/いいえ"をキャプチャする前に何をしていましたか(1がはい、0がノー)3つのオプションが必要です。 varcharのテキストと同じです。SQL Serverのビットデータ型をVarCharに変換します。

列のデータ型をbitからvarcharに変更する方法はありますか、また、現在のレコードデータを更新して、0の場合は「いいえ」に、1の場合は「はい」に変更しますか?

答えて

8

NULLを「n/a」と意味するのはなぜですか?

それ以外の場合は、値0,1,2(おそらく1,2,3)とその意味を含むルックアップテーブルを使用してTINYINTを使用します。次に、2つのテーブルの間にFKを追加して、それらの値だけが入力されるようにします。

最後のの選択肢は、CHAR(1)の列を使用します。これはで、と指定した場合は、Latin1_General_100_BIN2などのバイナリ照合も指定されます。バイナリ照合は、他の2つのオプションよりもパフォーマンスが低下しないようにします。バイナリ照合がなければ、文字列は値を比較しますが、余分な時間がかかりますが、この使用法には意味がありません。 AFTER INSERT, UPDATE最初にUPPER()にこの値を一致させ、すべての値がYN、またはA(「該当なし」)のいずれかであることを強制する必要があります。これは、0,1、および2よりも読みやすく(TINYINTを介して)、検索と同様に効率的です。また、1バイトだけでも、大文字のみを指定することを覚えておく必要があります。そうしないと、期待した結果が得られない可能性があります。 。

あなただけ遅く;-)を取得してシステムを気にしない場合を除き、VARCHAR(3)を使用し、完全な値N/A/Yes/Noを格納するために、すべてのでない理由はありません。

+2

+1000これに対して。ビットデータ型は2つの値を持たず、3.1,0、NULLを持ちます。 –

+1

私はDBだけを残してコードを変更することができるので、優れたアイデアと実装が簡単です。ありがとう! –

+1

@SeanLangeありがとう:) Silverlightの開発/ XAMLを使いこなしたことがあるのか​​どうかはわかりませんが、それはフォーム要素として三角形のブールチェックボックスをどこで提供しているのか分かりませんでした。あなたは実際にそれをチェックし、チェックを外して、それを解除することができます!チェックを外すと、チェックボックスとは明らかに異なるチェックボックスに表示されます。それはかなり素晴らしかったです。 –

0
  1. ビット列
  2. を削除し、既存のビット列
  3. に基づいて、それを更新し、新たなvarchar列
  4. を追加します(optionaly)古い列の名前に新しい列の名前を変更
0

実際のchar(3)

またはscutzly

により示唆されるようにFKテーブルにtinyint型を使用効率的なより多くのスペースとなり、私は死んでいた死んでびっくりしましたが、私はちょうど(3をcharにビットを変換することができますすることができます)を右クリックしてSSMSでデザインします。

0
Alter Table TableName 
Alter Column ColumnName Varchar(3) 

Update TableName 
Set ColumnName = 'Yes' 
Where ColumnName = '1' 

Update TableName 
Set ColumnName = 'No' 
Where ColumnName = '0' 
+0

私はdownvoteするつもりはありませんが、この変更を行うことには全く利点がないことを指摘します。実際には、このフィールドに対するクエリが遅くなり、ディスクとバッファプールの両方でより多くの領域が必要になります。 –

関連する問題