如果我有下表:
| name | value |
------------------
| A | 1 |
| B | NULL |
目前,名称的类型为varchar(10)
,而值的类型为bit
。
我想更改此表,以便该值实际上是nvarchar(3)
,但我不希望在更改期间丢失任何信息。所以最后我想得到一个看起来像这样的表:
| name | value |
------------------
| A | Yes |
| B | No |
将此列从一种类型转换为另一种类型的最佳方法是什么,并根据预先确定的翻译转换其中的所有数据?
注意:我知道如果我将varchar(50)
转换为varchar(200)
,或int
转换为bigint
,那么我可以改变表。但我需要bit
到nvarchar
的类似程序,这样做不会有效。
答案 0 :(得分:3)
最好的选择是将ALTER位改为varchar,然后运行更新以将1更改为“是”,将0或NULL更改为“否”
这样您就不必创建新列,然后再重命名。
答案 1 :(得分:1)
Alex K's评论我的问题是最好的。
最简单,最安全;添加新列,使用transform进行更新,删除现有列,重命名新列
使用简单的方法转换每个项目:
UPDATE Table
SET temp_col = CASE
WHEN value=1
THEN 'yes'
ELSE 'no'
END
答案 2 :(得分:0)
您应该可以将数据类型从一个位更改为nvarchar(3)而不会出现问题。这些值将从位1转换为字符串" 1"。之后,您可以运行一些SQL来更新" 1"到"是"和" 0"到"不"。
我没有在本地使用SQL Server 2008,但确实在2012年尝试过。在尝试之前创建一个小表并进行测试,并创建数据备份以确保安全。