我有一个表,其中有一列当前处于活动状态:
name NVARCHAR(128) NOT NULL DEFAULT ''
我正在更改这样的列以使其可以为空:
ALTER TABLE mytable ALTER COLUMN name NVARCHAR(128) NULL
但是,在表的一个实例中名为“DF__mytable__datab__7DE4B36”的默认约束仍然存在。我知道如果原作者命名约束,这可以避免。我有这些表的几个实例,但我不想手动删除我拥有的每个表中的每个约束。在 Sql Server 中的列上删除这个默认约束的最简单和最优雅的方法是什么,我可以统一应用于该表的每个实例?
编辑
这是我最终使用的脚本:
DECLARE @table_id AS INT
DECLARE @name_column_id AS INT
DECLARE @sql nvarchar(255)
-- Find table id
SET @table_id = OBJECT_ID('mytable')
-- Find name column id
SELECT @name_column_id = column_id
FROM sys.columns
WHERE object_id = @table_id
AND name = 'name'
-- Remove default constraint from name column
SELECT @sql = 'ALTER TABLE mytable DROP CONSTRAINT ' + D.name
FROM sys.default_constraints AS D
WHERE D.parent_object_id = @table_id
AND D.parent_column_id = @name_column_id
EXECUTE sp_executesql @sql
可以在此处找到另一个可用于完成此操作的脚本: 如何在不知道其名称的情况下删除 SQL 默认约束?
谢谢!