Saturday, February 15, 2014

Adding Set of Columns by Default on SQL Table Creation

Here is the easy to way to add a set of default columns such as Created User, Modified Date etc. to be added on table creation. Just run the following query.

ALTER TRIGGER TRG_TABLES
    ON DATABASE
    AFTER CREATE_TABLE
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @TABLE_NAME SYSNAME
    SELECT @TABLE_NAME = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'SYSNAME')

    DECLARE @SQL NVARCHAR(MAX)
    SELECT @SQL = STUFF((
        SELECT CHAR(13) + 'ALTER TABLE [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + ']
        ADD
              CreatedUser BIGINT
            , CreatedDate DATETIME
            , ModifiedUser BIGINT
            , ModifiedDate DATETIME
            ,StatusId BIGINT;'
        FROM sys.objects o
        WHERE o.[type] = 'U'
            AND o.[object_id] = OBJECT_ID(@TABLE_NAME)
            AND NOT EXISTS(
                SELECT 1
                FROM sys.columns c
                WHERE o.[object_id] = c.[object_id]
                    AND TYPE_NAME(c.system_type_id) = 'DATETIME'
                    AND c.name IN ('CreatedUser', 'CreatedDate', 'ModifiedUser', 'ModifiedDate','StatusId')
            )
        FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '')

    EXEC sys.sp_executesql @SQL

END
GO