SQL Server列转换

时间:2011-01-27 22:25:55

标签: sql sql-server

我有一个表,称之为课程,名为courseCode。

目前列类型为tinyInt,但我需要将其转换为varchar,因为它现在需要存储'A'。在有人因为糟糕的设计而跳过我之前,我没有设计这张桌子......哈哈。

目前,该表仅存储0到9的数字。

这是否与以下声明一样简单?

ALTER TABLE dbo.Course
ALTER COLUMN courseCode VARCHAR(30)

或者这会导致不必要的转换问题吗?我从来没有做过这样的事情,并且当您的客户使用旧类型存储数据时,我希望听到有关转换列类型的最佳实践。感谢。

3 个答案:

答案 0 :(得分:0)

对于特定的数据类型转换,这应该可以正常工作。其他人可能会让你头疼,但是对于varchar而言非常简单......

答案 1 :(得分:0)

我认为这已经足够......只要与该字段相关的某些约束不会阻止您。找出答案的最佳方法是复制数据库并尝试复制。

答案 2 :(得分:0)

检查该列是否附加约束或默认值。 (以mytable的实际表格为准)

sp_help mytable

检查默认值,支票,外键,索引,唯一,主键 - 任何

如果列中附有任何内容,则必须删除它们并在转换后重新创建。

的实际操作
ALTER TABLE dbo.Course
ALTER COLUMN courseCode VARCHAR(30)

100%正确,至少对于tinyint。只要大小适合,几乎所有东西都可以在SQL Server中转换为varchar *。

我也是正确调整列大小的忠实粉丝,所以如果你需要从0-9扩展到1-char alpha,只需使用Char(1)

*有一些例外,例如GUID,需要通过varchar(max),然后缩减到大小。