----------------------------------------------
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失败,因为一个或多个对象访问 这一栏。
我的问题是如何强制我的查询来应对它?我还想将此列设置为主键和标识
答案 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。