在SQL Server中将位数据类型转换为VarChar

Al *_*ndo 2 sql sql-server ssms

我有一些使用bit数据类型的列.最终用户现在想要一个N/A选项,所以在我使用一点来捕获"是/否"之前(1为是,0为否)我现在需要有三个选项是/否/ NA我可以存储就像在文本中一样varchar.

有没有办法将列的数据类型更改bitvarcharAND还更新当前记录数据,其中任何0我更改为"否",1我更改为"是"?

Sol*_*zky 8

为什么不用NULL来表示"不适用"?

否则使用TINYINT包含值0,1和2(或者可能是1,2和3)及其含义的查找表.然后在两个表之间添加FK以强制只输入这些值.

最后的选择是去同一个CHAR(1)列.这将是确定只有当您还指定了一个二进制排序规则,如Latin1_General_100_BIN2.二进制排序规则将使您不会失去其他两个选项的性能.如果没有二进制排序规则,字符串列会将值与语言规则进行比较,这些规则需要额外的时间,但对此用法没有任何意义.你还需要一个AFTER INSERT, UPDATE触发到第一UPPER()一致性这个值,然后执行所有的值或者是Y,N,或A(对于"N/A").这比0,1和2(通过TINYINT)更具可读性,并且同样有效地进行搜索,也只有1个字节,但是BUT使用时需要记住仅指定大写字母,否则它们可能无法获得预期结果.

没有理由在所有使用VARCHAR(3)并存储满值N/A/ Yes/ No,除非你只是不关心系统越来越慢;-).

  • 这个+1000.位数据类型没有2个值,它有3.1,0和NULL. (2认同)