【发布时间】:2012-06-02 09:21:48
【问题描述】:
我有一个表,其中包含这样的列,目前处于活动状态:
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
可以在此处找到另一个可用于完成此操作的脚本: How to drop SQL default constraint without knowing its name?
谢谢!
【问题讨论】:
-
在这里使用大部分第二个答案有什么问题? stackoverflow.com/questions/314998/…
-
是的,这个答案似乎也可以,但我自己还没有测试过那个脚本。
-
由于您特别提到 default 约束并且当前接受的答案对他们不起作用,我建议将其中一个实际上可以作为正确答案的答案标记为(如果这意味着您需要使用问题中的代码发布答案以便您可以接受,那很好)。如果接受答案实际上不起作用,那会浪费人们的时间。
标签: sql sql-server database tsql