如果所述列中有数据,更改SQL Server数据库中列类型的最佳方法是什么?

时间:2015-07-29 15:31:07

标签: sql sql-server sql-server-2008

如果我有下表:

|  name  |  value  |
 ------------------
|   A    |    1    |
|   B    |   NULL  |

目前,名称的类型为varchar(10),而值的类型为bit

我想更改此表,以便该值实际上是nvarchar(3),但我不希望在更改期间丢失任何信息。所以最后我想得到一个看起来像这样的表:

|  name  |  value  |
 ------------------
|   A    |   Yes   |
|   B    |   No    |

将此列从一种类型转换为另一种类型的最佳方法是什么,并根据预先确定的翻译转换其中的所有数据?

注意:我知道如果我将varchar(50)转换为varchar(200),或int转换为bigint,那么我可以改变表。但我需要bitnvarchar的类似程序,这样做不会有效。

3 个答案:

答案 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年尝试过。在尝试之前创建一个小表并进行测试,并创建数据备份以确保安全。