[英]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()
這個值的一致性,然后強制所有的值都是Y
, N
或A
(對於“n / a”)。 這比0,1和2(通過TINYINT
)更具可讀性,並且同樣有效地進行搜索,也只有1個字節,BUT使用時需要記住僅指定大寫字母,否則它們可能無法獲得預期結果。
沒有理由在所有使用VARCHAR(3)
並存儲滿值N/A
/ Yes
/ No
,除非你只是不關心系統越來越慢;-)。
實際上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.