簡體   English   中英

在SQL Server中將位數據類型轉換為VarChar

[英]Convert bit datatype to VarChar in SQL Server

我有一些使用bit數據類型的列。 最終用戶現在想要一個N / A選項,所以在我使用一點來捕獲“是/否”之前(1為是,0為否)我現在需要有三個選項是/否/ NA我可以存儲就像varchar文本一樣。

有沒有辦法將列的數據類型從bit更改為varchar並且還更新當前記錄數據,其中任何0的I更改為“No”而1的I更改為“Yes”?

為什么不使用NULL來表示“不適用”?

否則將TINYINT與包含值0,1和2(或者可能是1,2和3)及其含義的查找表一起使用。 然后在兩個表之間添加FK以強制只輸入這些值。

最后一個選擇是使用CHAR(1)列。 只有在您還指定了二進制排序規則(例如Latin1_General_100_BIN2才會出現這種情況。 二進制排序規則將使您不會失去其他兩個選項的性能。 如果沒有二進制排序規則,字符串列會將值與語言規則進行比較,這些規則需要額外的時間,但對此用法沒有任何意義。 你還需要一個AFTER INSERT, UPDATE Trigger來首先UPPER()這個值的一致性,然后強制所有的值都是YNA (對於“n / a”)。 這比0,1和2(通過TINYINT )更具可讀性,並且同樣有效地進行搜索,也只有1個字節,BUT使用時需要記住僅指定大寫字母,否則它們可能無法獲得預期結果。

沒有理由在所有使用VARCHAR(3)並存儲滿值N/A / Yes / No ,除非你只是不關心系統越來越慢;-)。

  1. 添加新的varchar列
  2. 根據現有的位列更新它
  3. 刪除位列
  4. (optionaly)將新列重命名為舊列的名稱

實際上char(3)會更節省空間

或者像scutzly建議的那樣使用帶有FK表的tinyint

我死了很驚訝,但我能夠在SSMS中通過右鍵設計將位轉換為char(3)。

Alter Table TableName
Alter Column ColumnName Varchar(3)

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM