SetColumnDefault

Parameters

Parameter Parameter Type Mode Description
@vTableColumnName varchar(257) IN
@vDefVal varchar(50) IN

Definition

Copy


            CREATE procedure dbo.SetColumnDefault(@vTableColumnName varchar(257), @vDefVal varchar(50))
            AS
            /*  
                DPC 2.18.2003 - This procedure takes a table.column argument and sets that column's
                         default value to vDefVal by dropping its default constraint and
                        then re-adding it with the new default value.
            */
            declare @vConstraintName varchar(128)
            declare @vTableName varchar(128)  
            declare @vColumnName varchar(128)
            declare @vCollation varchar(128)

            if charindex('.',@vTableColumnName) = 0 or charindex('dbo',@vTableColumnName) > 0
                begin
                    raiserror ('vTableColumnName must have the form table.column',16,1)
                end
            else
                begin
                set @vTableName = parsename(@vTableColumnName, 2)
                set @vColumnName = parsename(@vTableColumnName, 1)

                set nocount on

                select  @vCollation = c.collationid from syscolumns c
                    where c.id = object_id(@vTableName)        
                    and c.name = @vColumnName    

                select @vConstraintName = o.name from syscolumns c, sysobjects o
                    where c.id=object_id(@vTableName)
                    and c.cdefault = o.id
                    and c.name = @vColumnName

                IF @vConstraintName IS NOT NULL
                    BEGIN
                    execute ('ALTER TABLE ' + @vTableName + ' DROP CONSTRAINT ' + @vConstraintName
                      END
                ELSE
                    BEGIN
                    SET @vConstraintName = 'DF__' + left(@vTableName,12) + '__' + left(@vColumnName,12)
                    END

                IF @vDefVal IS NOT NULL
                    BEGIN
                    --if the default value is a text variable, we need to wrap it in quotes
                    IF @vCollation IS NOT NULL
                        BEGIN
                        set @vDefVal = '''' + @vDefVal + ''''            
                        END

                    execute ('ALTER TABLE ' + @vTableName + ' ADD CONSTRAINT ' +  @vConstraintName + ' default (' + @vDefVal + ') for ' + @vColumnName )
                    END
            END