This stored procedure will take a pre-defined view, table or temp table and return the results as an HTML table formatted string. This can then be used with email to send better formatted emails.
Example usage
This stored procedure will take a pre-defined view, table or temp table and return the results as an HTML table formatted string. This can then be used with email to send better formatted emails.
Example usage
USE master
GO
IF EXISTS ( SELECT *
FROM sys.objects
WHERE objects.object_id = OBJECT_ID(
N'[dbo].[sp_GenerateHTMLTableResults]')
AND objects.type IN (N'P', N'PC'))
DROP PROCEDURE [dbo].[sp_GenerateHTMLTableResults]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS ( SELECT *
FROM sys.objects
WHERE objects.object_id = OBJECT_ID(
N'[dbo].[sp_GenerateHTMLTableResults]')
AND objects.type IN (N'P', N'PC'))
BEGIN
EXEC sys.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_GenerateHTMLTableResults] AS'
END
GO
ALTER PROCEDURE [dbo].[sp_GenerateHTMLTableResults]
(
@ResultsTableName NVARCHAR(100) ,
@GeneratedHTML NVARCHAR(MAX) OUTPUT
)
AS
BEGIN
DECLARE @BaseSQL NVARCHAR(MAX)
DECLARE @SQL NVARCHAR(MAX)
DECLARE @ColumnHeader NVARCHAR(MAX) = ''
DECLARE @TableResults NVARCHAR(MAX) = ''
DECLARE @ParmDefinition NVARCHAR(MAX)
DECLARE @BodyHTML NVARCHAR(MAX)
DECLARE @TableColumns TABLE
(
ColumnName NVARCHAR(MAX)
)
SET @BaseSQL = 'SELECT TN.N.value(''local-name(.)'', ''sysname'') AS ColumnName FROM (SELECT TV.* FROM ( SELECT 1 ) AS D(N) OUTER APPLY (SELECT TOP ( 0 ) * FROM '
+ @ResultsTableName
+ ' ) AS TV FOR XML PATH(''''), ELEMENTS XSINIL, TYPE ) AS TX(X) CROSS APPLY TX.X.nodes(''*'') AS TN(N)'
INSERT INTO @TableColumns ( ColumnName )
EXECUTE sys.sp_executesql @BaseSQL
SET @SQL = ' SELECT @Columns = isnull(@Columns,'''') + ''<th>'' +ColumnName + ''</th>'' FROM ('
+ @BaseSQL + ') a'
SET @ParmDefinition = N'@Columns nvarchar(max) OUTPUT';
EXECUTE sys.sp_executesql @SQL ,
@ParmDefinition ,
@Columns = @ColumnHeader OUTPUT;
SET @ColumnHeader = '<table cellpadding="2" cellspacing="2" border="1" style="font-family: Arial; font-size: 8pt">'
+ @ColumnHeader
SET @SQL = 'SELECT @BodyHTML = CAST((SELECT td = '
SELECT @SQL = @SQL + 'CAST(' + tc.ColumnName + ' as nvarchar(max)) '
+ '+''</td><td>''+'
FROM @TableColumns AS tc
SET @SQL = LEFT(@SQL, LEN(@SQL) - 13) + ' FROM ( SELECT * FROM '
+ @ResultsTableName
+ ' ) AS d FOR XML PATH(''tr''), TYPE ) AS VARCHAR(MAX))'
SET @ParmDefinition = N'@BodyHTML nvarchar(max) OUTPUT';
EXECUTE sys.sp_executesql @SQL ,
@ParmDefinition ,
@BodyHTML = @BodyHTML OUTPUT;
SET @GeneratedHTML = @ColumnHeader
+ REPLACE(
REPLACE(@BodyHTML, '<', '<') ,
'>' ,
'>') + '<table>'
END
GO
EXEC sys.sp_MS_marksystemobject sp_GenerateHTMLTableResults
GO