Table variable based Template to iterate through the default constraints of the tables

DECLARE @STdate datetime</code>

SELECT @STdate = GETDATE()

--Create a table with columns which suits your needs.
DECLARE @tbl table
(
PKID int identity(1,1),
TableName varchar(1000),
ColumnName varchar(500),
ConstraintName varchar(500),
DefaultValueDef varchar(100),
Processed bit default 0 --It is important that you have this field, as this field is used as a reference to find out if the row is processed or not.
)

--DECLARE necessary variables to operate on
DECLARE @PKID int,@TabNam varchar(1000), @ColNam varchar(500), @ConstNam varchar(500), @Def varchar(100)

INSERT INTO @tbl(TableName,ColumnName,ConstraintName,DefaultValueDef)
SELECT sc.Name + '.' + t.Name,c.Name,dc.Name,dc.[definition]
FROM sys.tables t
INNER JOIN sys.default_constraints dc ON t.object_id = dc.parent_object_id
INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND c.column_id = dc.parent_column_id
inner join sys.schemas sc on t.schema_id = sc.schema_id

--Iterate through each row
WHILE (EXISTS (select PKID from @tbl where Processed=0))
BEGIN

SELECT TOP 1 @PKID = [PKID],
@TabNam = TableName,
@ColNam = ColumnName,
@ConstNam = ConstraintName,
@Def = DefaultValueDef
FROM @tbl where Processed=0

select @TabNam, @ColNam, @ConstNam, @Def

UPDATE @tbl
SET Processed=1
WHERE PKID = @PKID

END

SELECT DATEDIFF(millisecond, @stdate, getdate()) as 'Finished in millisecond'

Leave a comment