Universal Logging Stored procedure with dynamic sql
CREATE PROCEDURE sp_universallogger
@Table as nvarchar(50),
@Columns as nvarchar(max),
@Values as nvarchar(max)
AS
BEGIN
DECLARE @SQL as nvarchar(max)
SET @SQL = '
DECLARE @Table as nvarchar(max)
SET @Table = '''+ @Table +'''
DECLARE @Columns as nvarchar(max)
SET @Columns = ''' + @Columns + '''
DECLARE @Values as nvarchar(max)
SET @Values= ''' + @Values + '''
INSERT INTO ' + @Table + ' (' + @Columns + ')
SELECT
' + @Columns + '
FROM
(
select B.Value AS [ValueData], A.Value AS [ColumnName] FROM (select * from [SJ].[DBO].Split(@Columns, '','')) A
INNER JOIN (select * from [SJ].[DBO].Split(@Values, '','')) B ON A.Id = B.id
) T
PIVOT
(
MAX([ValueData]) for ColumnName in (' + @Columns + ')
) P'
EXECUTE sp_executesql @SQL
END
GO