删除一个SQLTable列给出Constraint dependency error

Delete a SQL Table Column give Constraint dependency error

我尝试在 SQL 中删除一列,但出现此错误:

The object 'DF__...'is dependent on column ... 

我发现了很多需要先删除约束的解决方案,所以我 运行 这个并成功了:

ALTER TABLE [dbo].[Configuration] DROP CONSTRAINT DF__SiteConfi__Na__2DFCAC08;
ALTER TABLE [dbo].[Configuration] DROP COLUMN NaFlag;

但是我需要这个脚本在任何服务器上 运行,所以我不想提及约束名称,因为它在任何其他服务器上可能不同。什么是最好的解决方案?

这是一个帮助您入门的查询:

with q as
(
    select schema_name(t.schema_id) schema_name,
           t.name table_name,
           c.name column_name,
           d.name default_name
    from sys.tables t
    join sys.columns c
      on t.object_id = c.object_id
    join sys.default_constraints d
      on d.parent_object_id = t.object_id
     and d.parent_column_id = c.column_id
 )
select concat(
        'alter table ',
        quotename(schema_name),'.',quotename(table_name),
        ' drop constraint ', quotename(default_name) ) sql
from q

您可以使用一些动态 SQL 来删除默认值。如果它是一个单独的脚本来删除列,那么它更容易,比如:

DECLARE @sqlDF NVARCHAR(MAX);
SELECT @sqlDF = 'ALTER TABLE {$tableName} DROP CONSTRAINT ' + QUOTENAME(OBJECT_NAME([default_object_id])) + ';'
FROM sys.columns
WHERE [object_id] = OBJECT_ID('{$tableName}') AND [name] in ({$columns}) AND [default_object_id] <> 0;

IF @sqlDF IS NOT NULL
    EXEC(@sqlDF);

如果您正在使用迁移工具,也许您将不得不重构它,因此它不会尝试重新声明 @sqlDF 变量。