【问题标题】:Reliably remove default constraint from column从列中可靠地删除默认约束
【发布时间】:2016-09-15 22:09:50
【问题描述】:

以下代码是我在 SO 某处找到的,稍微修改了变量名。

-- If data type differs, drop constraints and change data type.
WHILE 0=0
BEGIN
    SET @ConstraintName = (SELECT TOP 1 constraint_name FROM information_schema.constraint_column_usage WHERE table_name = @TableName and column_name = @FieldName)
    IF @ConstraintName IS NULL BREAK;
    EXEC('ALTER TABLE ' + @TableName + ' DROP CONSTRAINT "' + @ConstraintName + '"');
END
EXEC('ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @FieldName + ' ' + @FieldType + ' NOT NULL');

尽管删除了信息模式中找到的所有约束,但后续执行仍然会抛出错误:

The object 'DF_settings_monitoring' is dependent on column 'monitoring'.
ALTER TABLE ALTER COLUMN monitoring failed because one or more objects access this column.

在某些情况下。只有一部分,不是全部。

我发现information_schema.constraint_column_usage 表不包含所有默认约束,但我不确定为什么。

是否有更可靠的信息来源关于某个列的现有约束?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

正如here 的回答,information_schema 不包括默认约束。

所以如果你用这个替换你的选择:

select top 1 name from sys.default_constraints

... 你应该很高兴。

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多