I had to create a script for dropping constraints on a table – no problem if the constaint is a named default, but if the default has a system generated name, it gets a bit hairy. Here’s an example of how the defaults get created:
Create table TestTable1
(TestConst datetime default Getdate())
Go
I googled this and found Pinal Dave had a good script to find the constraints in database located here.
Here’s what I came up with for a script to find these constraints:
Declare @TableName varchar(500),
@ColumnName varchar(500),
@DFName varchar(500),
@SchemaName varchar(500),
@SQL varchar(2000)
--Change these for the table and column you are looking for--
Set @TableName = 'TestTable1'
Set @ColumnName = 'TestConst'
SELECT OBJECT_NAME(SO.OBJECT_ID) AS NameofConstraint,
SCHEMA_NAME(SO.schema_id) AS SchemaName,
OBJECT_NAME(SO.parent_object_id) AS TableName,
SC.name as ColumnName,
SO.type_desc AS ConstraintType
FROM sys.objects SO
join sys.columns SC on SC.default_object_id = SO.object_id
WHERE SO.type_desc LIKE '%CONSTRAINT'
and SC.object_id = object_id(@TableName)
and SC.name = @ColumnName
Finally, here’s the script to show and drop it:
Declare @TableName varchar(500),
@ColumnName varchar(500),
@DFName varchar(500),
@SchemaName varchar(500),
@SQL varchar(2000)
--Change these for the table and column you are looking for--
Set @TableName = 'TestTable1'
Set @ColumnName = 'TestConst'
SELECT OBJECT_NAME(SO.OBJECT_ID) AS NameofConstraint,
SCHEMA_NAME(SO.schema_id) AS SchemaName,
OBJECT_NAME(SO.parent_object_id) AS TableName,
SC.name as ColumnName,
SO.type_desc AS ConstraintType
FROM sys.objects SO
join sys.columns SC on SC.default_object_id = SO.object_id
WHERE SO.type_desc LIKE '%CONSTRAINT'
and SC.object_id = object_id(@TableName)
and SC.name = @ColumnName
If exists (Select 1 from sys.objects SO join sys.columns SC on SC.default_object_id = SO.object_id
where SC.object_id = object_id(@TableName)
and SC.name = @ColumnName)
Begin
Select @DFName = SO.name,
@SchemaName = SCHEMA_NAME(SO.schema_id)
from sys.objects SO join sys.columns SC on SC.default_object_id = SO.object_id
where SC.object_id = object_id(@TableName)
and SC.name = @ColumnName
Select @SQL = 'ALTER TABLE ' + @SchemaName + '.' + @TableName + ' DROP CONSTRAINT ' + @DFName
EXEC (@SQL)
End