更改列的数据类型并在SQL中将列设置为标识

时间:2012-09-03 08:22:08

标签: sql-server alter

----------------------------------------------
DepartmentCode  varchar(30) AllowNulls
----------------------------------------------

有谁知道如何在SQL 2008中更改列的数据类型?这是我要更改的列,但是当我尝试此查询时,

ALTER TABLE SystemDepartment ALTER COLUMN DepartmentCode smallint NOT NULL

我收到以下错误:

  

Msg 5074,Level 16,State 1,Line 1   对象'PK_SystemDepartment'依赖于列   'DepartmentCode'。 Msg 4922,Level 16,State 9,Line 1 ALTER TABLE   ALTER COLUMN DepartmentCode失败,因为一个或多个对象访问   这一栏。

我的问题是如何强制我的查询来应对它?我还想将此列设置为主键和标识

3 个答案:

答案 0 :(得分:6)

首先需要删除主键约束。

ALTER TABLE SystemDepartment DROP CONSTRAINT PK_SYSTEMDEPARTMENT

然后只有你可以改变该列。

您无法强制现有列进行标识。在这种情况下,您需要添加带有标识的新列,然后将sp_rename添加到旧名称。

答案 1 :(得分:0)

如果您的约束是针对用户类型的,那么不要忘记查看是否存在Default Constraint,通常是DF__TableName__ColumnName__6BAEFA67,如果是,那么您将需要删除默认约束,像这样:

ALTER TABLE TableName DROP CONSTRAINT [DF__TableName__ColumnName__6BAEFA67]

有关更多信息,请参阅杰出的Aaron Bertrant对this answer的评论。

答案 2 :(得分:-1)

试试这个,

正如您所说,您正在获得主键约束错误,首先您必须删除主键并使用以下查询,

    ALTER TABLE SystemDepartment MODIFY DepartmentCode int(3)

谢谢,

Venkat。