CREATE PROC TABLE_TRIGGER
@TABLENAME VARCHAR(MAX)=''
AS
BEGIN
DECLARE @DATABASECONNECTION VARCHAR(MAX)=''
BEGIN
BEGIN TRY
BEGIN TRAN
DECLARE @COLUMLIST VARCHAR(MAX)
DECLARE @PRIMARYKEY VARCHAR(MAX)
DECLARE @DESTINATIONCOL VARCHAR(MAX)
SELECT @COLUMLIST = COALESCE(@COLUMLIST,'','') + name +',' FROM sys.columns WHERE OBJECT_NAME(object_id) = @TABLENAME
SELECT @PRIMARYKEY = COALESCE(@PRIMARYKEY,'','') +'Sou.' + COL_NAME(object_id,index_id)
+'= Dest.' + COL_NAME(object_id,index_id)
FROM sys.indexes WHERE OBJECT_NAME(object_id) = @TABLENAME
SET @COLUMLIST = SUBSTRING(@COLUMLIST,0,LEN(@COLUMLIST))
SET @DESTINATIONCOL = CHAR(13)
SELECT @DESTINATIONCOL = COALESCE(@DESTINATIONCOL,'','') + CHAR(9)+ CHAR(9)+ CHAR(9) + 'Dest.' + Col.NAME + ' = Sou.' + Col.NAME + ', '+ CHAR(13)
FROM SYS.OBJECTS Obj
LEFT JOIN SYS.COLUMNS Col
ON Col.OBJECT_ID = Obj.OBJECT_ID
WHERE Obj.NAME = @TABLENAME
ORDER BY COLUMN_ID
SET @DESTINATIONCOL = SUBSTRING(@DESTINATIONCOL,0,LEN(@DESTINATIONCOL)-2)
DECLARE @sql NVARCHAR(MAX) = 'CREATE TRIGGER TR_'+ @TABLENAME + '_MYTRIGGER ON '+@TABLENAME+'
AFTER INSERT,UPDATE,DELETE AS
BEGIN
MERGE INTO ' + @DATABASECONNECTION + @TABLENAME +' As Dest
USING
(
SELECT '+ @COLUMLIST+ ' FROM INSERTED
) AS Sou ON '+ @PRIMARYKEY + '
WHEN MATCHED THEN
UPDATE SET '
+CHAR(9) + @DESTINATIONCOL + CHAR(13)+
CHAR(9)+ ' WHEN NOT MATCHED THEN
INSERT('+ @COLUMLIST +')
VALUES ('+ @COLUMLIST +');
END'
SELECT @sql
COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR('Trigger Not Created !!', 18, 1)
ROLLBACK TRAN
END CATCH
END
END
@TABLENAME VARCHAR(MAX)=''
AS
BEGIN
DECLARE @DATABASECONNECTION VARCHAR(MAX)=''
BEGIN
BEGIN TRY
BEGIN TRAN
DECLARE @COLUMLIST VARCHAR(MAX)
DECLARE @PRIMARYKEY VARCHAR(MAX)
DECLARE @DESTINATIONCOL VARCHAR(MAX)
SELECT @COLUMLIST = COALESCE(@COLUMLIST,'','') + name +',' FROM sys.columns WHERE OBJECT_NAME(object_id) = @TABLENAME
SELECT @PRIMARYKEY = COALESCE(@PRIMARYKEY,'','') +'Sou.' + COL_NAME(object_id,index_id)
+'= Dest.' + COL_NAME(object_id,index_id)
FROM sys.indexes WHERE OBJECT_NAME(object_id) = @TABLENAME
SET @COLUMLIST = SUBSTRING(@COLUMLIST,0,LEN(@COLUMLIST))
SET @DESTINATIONCOL = CHAR(13)
SELECT @DESTINATIONCOL = COALESCE(@DESTINATIONCOL,'','') + CHAR(9)+ CHAR(9)+ CHAR(9) + 'Dest.' + Col.NAME + ' = Sou.' + Col.NAME + ', '+ CHAR(13)
FROM SYS.OBJECTS Obj
LEFT JOIN SYS.COLUMNS Col
ON Col.OBJECT_ID = Obj.OBJECT_ID
WHERE Obj.NAME = @TABLENAME
ORDER BY COLUMN_ID
SET @DESTINATIONCOL = SUBSTRING(@DESTINATIONCOL,0,LEN(@DESTINATIONCOL)-2)
DECLARE @sql NVARCHAR(MAX) = 'CREATE TRIGGER TR_'+ @TABLENAME + '_MYTRIGGER ON '+@TABLENAME+'
AFTER INSERT,UPDATE,DELETE AS
BEGIN
MERGE INTO ' + @DATABASECONNECTION + @TABLENAME +' As Dest
USING
(
SELECT '+ @COLUMLIST+ ' FROM INSERTED
) AS Sou ON '+ @PRIMARYKEY + '
WHEN MATCHED THEN
UPDATE SET '
+CHAR(9) + @DESTINATIONCOL + CHAR(13)+
CHAR(9)+ ' WHEN NOT MATCHED THEN
INSERT('+ @COLUMLIST +')
VALUES ('+ @COLUMLIST +');
END'
SELECT @sql
COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR('Trigger Not Created !!', 18, 1)
ROLLBACK TRAN
END CATCH
END
END