【问题标题】:SQL Server 2008 modify data type of table columnSQL Server 2008 修改表列的数据类型
【发布时间】:2013-08-26 15:39:34
【问题描述】:

我需要修改一个表列的数据类型,这被认为是通过语句完成的:

ALTER TABLE QUANTITIES_NEW ALTER COLUMN VERSION_NEW VARCHAR(12);

很遗憾我出错了(德语)

Meldung 5074, Ebene 16, Status 1, Zeile 1
Das Objekt-Objekt 'UQ_QUANTITIES_NAME_VERSION' ist vom Spalte-Objekt 'VERSION_NEW' abhängig.
Meldung 4922, Ebene 16, Status 9, Zeile 1
Fehler bei ALTER TABLE ALTER COLUMN VERSION_NEW, da mindestens ein Objekt auf diese Spalte zugreift.

可以翻译成:

The object-object 'UQ_QUANTITIES_NAME_VERSION' depends on the column object 'VERSION_NEW'.
Failure at ALTER TABLE ALTER COLUMN VERSION_NEW, because this column is accessed by one or more columns.

我假设唯一约束没有被禁用。于是我执行了语句

ALTER TABLE QUANTITIES  NOCHECK CONSTRAINT ALL
;

也是。但还是同样的错误。

【问题讨论】:

    标签: sql-server sql-server-2008 unique-constraint


    【解决方案1】:

    删除相关的约束。如果您分解表,在部分约束中,您会发现一个与您的字段相关联的约束。算了吧。之后可以更改字段类型

    【讨论】:

    • 真的没有办法禁用约束然后启用它。因为如果我删除它,我必须重新添加它。
    • IHMO,没办法。因为在约束中存储了一些字段信息,比如 DEFAULT 值。
    • 由于 DDL 语句是由程序自动生成的,我需要知道有关 UniqueConstraint 的详细信息(例如列名),因为我想获得由程序生成的相同约束。是否有检索该信息的查询?提前致谢。
    • 试试这个:选择 dc.name 作为 [Constraint Name],dc.definition,so.name 作为 [Table] from sys.default_constraints dc left join dbo.sysobjects so on dc.parent_object_id = so。 id and so.xtype = 'u' and so.name = 'your_table' 按so.name排序
    • 感谢您的帮助。最后我得到了解决方案: SELECT TABLE_NAME, COLUMN_NAME from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu WHERE ccu.CONSTRAINT_NAME = 'CONSTRAINT_NAME' ;
    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 2014-11-11
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多