我有一个表,称之为课程,名为courseCode。
目前列类型为tinyInt,但我需要将其转换为varchar,因为它现在需要存储'A'。在有人因为糟糕的设计而跳过我之前,我没有设计这张桌子......哈哈。
目前,该表仅存储0到9的数字。
这是否与以下声明一样简单?
ALTER TABLE dbo.Course
ALTER COLUMN courseCode VARCHAR(30)
或者这会导致不必要的转换问题吗?我从来没有做过这样的事情,并且当您的客户使用旧类型存储数据时,我希望听到有关转换列类型的最佳实践。感谢。
答案 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),然后缩减到大小。