如何从表中的列中删除默认值?

16 浏览
0 Comments

如何从表中的列中删除默认值?

如何修改列以删除默认值?\n该列是通过以下方式创建的:\n

 ALTER TABLE sometable ADD somecolumn NCHAR(1) NOT NULL DEFAULT 'N'

\n然后通过以下方式进行了修改:\n

 ALTER TABLE sometable ALTER COLUMN somecolumn NCHAR(1) NULL

\n这样可以允许空值,但默认值仍然存在。如何删除它?

0
0 Comments

如何从表的列中删除默认值?

在修改十个不同的客户数据库时,出现了一个问题:没有一个一致的名称可以放入脚本中。这对于任何大规模的数据库推出来说都是一个问题。你最终不得不迫使自己始终为约束命名,以便在各个环境中保持一致。例如:ALTER表sometable添加somecolumn nchar(1) NOT NULL CONSTRAINT DF_TableName_SomeColumn DEFAULT 'N'

如果表上有多个默认值约束,你的解决方案将无法工作,它只会删除最后一个默认值。如果表对不同的列有约束,则需要按列名进行过滤:

declare @constraintName nvarchar(100)
select @constraintName = o.name from sys.objects o   
join sys.columns col on o.object_id = col.default_object_id where type = 'D' and
parent_object_id = object_id('tablename') and col.name = 'columnname' 

这是我想出的解决方案(在看到Josh W.的答案之前,实际上我看到了,但是我浏览得太快,误解了它):

declare @constraintName nvarchar(100)
select @constraintName = [name] from sys.objects where type = 'D' and parent_object_id = object_id('sometable')
if (@constraintName is not null)
  begin
     exec ('alter table [sometable] drop constraint [' + @constraintName +']')
  end

更新:如果表上的不同列有默认约束,第二行应该根据MirrorBoy下面的评论进行更改:

select @constraintName = o.name from sys.objects o   
join sys.columns col on o.object_id = col.default_object_id where type = 'D' and
parent_object_id = object_id('sometable') and col.name = 'someColumn' 

我在这里的优势是我知道整个表中只有一个这样的约束。如果有两个的话,我猜这就是为什么你应该给它们命名的原因。

解决方法就是根据约束名称来删除约束。使用sys.objects和sys.columns系统表来获取约束名称。如果表上有多个默认值约束,需要根据列名进行过滤。然后使用ALTER TABLE语句来删除约束。

0
0 Comments

从上面的内容中可以看出,这个问题的出现原因是需要在表的列中删除默认值。在这个例子中,问题的解决方法是使用以下步骤:

1. 首先,需要找到默认约束的名称。可以使用以下代码查询默认约束的名称:

DECLARE @constraintName nvarchar(200)
SELECT @constraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
                        WHERE NAME = N'__ColumnName__'
                        AND object_id = OBJECT_ID(N'__TableName__'))

在这个代码中,`__TableName__`和`__ColumnName__`是需要删除默认值的表名和列名。

2. 然后,需要判断默认约束的名称是否为空。如果不为空,执行以下代码删除默认约束:

IF @constraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @constraintName)

同样,`__TableName__`是需要删除默认值的表名。

通过以上步骤,就可以成功删除表的列中的默认值。这个解决方法可以在stackoverflow的链接中找到:https://stackoverflow.com/a/13715343/2547164

0
0 Comments

在SQL Server中,如果要从表的列中删除默认值,可以执行以下操作:

ALTER TABLE {TableName} 
DROP CONSTRAINT ConstraintName

如果在创建约束时没有指定名称,SQL Server会自动创建一个名称。可以使用SQL Server Management Studio浏览到表,打开其树节点,然后打开Constraints节点来查找约束名称。

如果我记得正确的话,约束的名称可能类似于DF_SomeStuff_ColumnName。

编辑:Josh W.的答案中包含了一个链接,链接到一个SO问题,该问题展示了如何使用SQL而不是使用Management Studio界面来查找自动生成的约束名称。

可以使用sp_help 'table_name'在SQL Server中获取约束的名称。

0