【发布时间】: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