http://www.sqlservercentral.com/scripts/TSQL/175511/?utm_source=SSC&utm_medium=pubemail
SQL table to HTML
By Eduardo Pivaral, 2018/08/09
Convert any table or select query to a html table format
FROM: www.sqlguatemala.com
SP: sp_TabletoHTML
Version: 1.1
AUTHOR: Eduardo Pivaral sqlguatemala.com
MIT License
This stored procedure converts a table or select query to a HTML table format, with some customization options.
I have taken as a base, a script Carlos Robles (dbamastery.com) provided me for a static table, so i modified it to accept any table and apply different or no styles, also you can output or not the column names to the table.
NOTES:
- This SP works with dynamic queries, also data is not validated, so it is vulnerable to SQL injection attacks, so always validate your queries first.
- Null values are not converted on this initial release, so before using it, remove null values from your data.
- Some special datatypes like geography, timestamp, xml, image are not supported, if you try to use them, an error will raise, remove these columns before using it.
- This tool is not designed to handle huge amounts of data, so, for massive information you can split them in various executions.
PARAMETERS:
- @stTable: input table or SELECT query, a schema.object or SELECT query format
- @RawTableStyle: OUTPUT variable, to use in another process or programatically
- @includeColumnName: 0=does not include column names | 1=include column names (DEFAULT)
- @TableStyle: 0=no style | 1=black borders (DEFAULT) | 2=grey style | 3=lightblue style | 4=zebra-striped table
SAMPLE EXECUTION:
Most basic usage, table name and all defaults to query window
EXEC sp_TabletoHTML @stTable = 'sys.dm_os_windows_info'
Output:
SELECT QUERY, all defaults
SET @SQLSentence = 'SELECT name,state_desc ,create_date,collation_name FROM sys.databases'
EXEC sp_TabletoHTML @stTable = @SQLSentence,
@RawTableStyle = @st OUTPUT
Output:
Remove column name
SET @SQLSentence = 'SELECT name,state_desc ,create_date,collation_name FROM sys.databases'
EXEC sp_TabletoHTML @stTable = @SQLSentence,
@includeColumnName = 0,
@RawTableStyle = @st OUTPUT
Output:
Gray style with columns
SET @SQLSentence = 'SELECT name,state_desc ,create_date,collation_name FROM sys.databases'
EXEC sp_TabletoHTML @stTable = @SQLSentence,
@TableStyle = 2,
@RawTableStyle = @st OUTPUT
Output:
Lightblue with columns
SET @SQLSentence = 'SELECT name,state_desc ,create_date,collation_name FROM sys.databases'
EXEC sp_TabletoHTML @stTable = @SQLSentence,
@TableStyle = 3,
@RawTableStyle = @st OUTPUT
Output:
zebra-striped table
SET @SQLSentence = 'SELECT name,state_desc ,create_date,collation_name FROM sys.databases'
EXEC sp_TabletoHTML @stTable = @SQLSentence,
@TableStyle = 4,
@RawTableStyle = @st OUTPUT
Output:
Remove style and columns
SET @SQLSentence = 'SELECT name,state_desc ,create_date,collation_name FROM sys.databases'
EXEC sp_TabletoHTML @stTable = @SQLSentence,
@TableStyle = 0,
@includeColumnName = 0,
@RawTableStyle = @st OUTPUT
Output:
IF OBJECT_ID('dbo.sp_TabletoHTML') IS NULL
EXEC ('CREATE PROCEDURE dbo.sp_TabletoHTML AS SELECT 1;');
GO
ALTER PROCEDURE [dbo].[sp_TabletoHTML]
@stTable AS NVARCHAR(max),
@RawTableStyle AS NVARCHAR(max) = '' OUTPUT,
@includeColumnName AS BIT = 1,
@TableStyle AS TINYINT = 1
AS
BEGIN
/*******************************************************************************
Convert any table or select query to a html <table> format
FROM: https://github.com/Epivaral/sql-table-to-html
SP: sp_TabletoHTML
Version: 1.1
AUTHOR: Eduardo Pivaral (www.sqlguatemala.com)
MIT License
This stored procedure converts a table or select query to a HTML table format,
with some customization options.
I have taken as a base, a script Carlos Robles (http://dbamastery.com/)
provided me for a static table, so i modified it to accept any table and apply different
or no styles, also you can output or not the column names to the table.
NOTES:
----------
* This SP works with dynamic queries, also data is not validated,
so it is vulnerable to SQL injection attacks, so always validate your queries first.
* Null values are not converted on this initial release, so before using it,
remove null values from your data.
* Some special datatypes like geography, timestamp, xml, image are not supported,
if you try to use them, an error will raise, remove these columns before using it.
* This tool is not designed to handle huge amounts of data, so, for massive information
you can split them in various executions.
-----------
PARAMETERS:
-----------
@stTable: input table or SELECT query, a schema.object or SELECT query format
@RawTableStyle: OUTPUT variable, to use in another process or programatically
@includeColumnName: 0=does not include column names | 1=include column names (DEFAULT)
@TableStyle: 0=no style | 1=black borders (DEFAULT) | 2=grey style | 3=lightblue style | 4=zebra-striped table
-----------
SAMPLE EXECUTION:
-----------------
Most basic execution with all defaults:
EXEC sp_TabletoHTML @stTable = 'sys.dm_os_sys_info'
more execution examples at: https://github.com/Epivaral/sql-table-to-html
-----------------
*******************************************************************************/
SET NOCOUNT ON;
IF EXISTS (
SELECT *
FROM tempdb.INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = '##rowstablePreHTML'
)
BEGIN
DROP TABLE ##rowstablePreHTML
END
/*** BASIC SQL Injection detection, always make your own validations before input any code */
IF (
(CHARINDEX('DELETE ', @stTable) > 0)
OR (CHARINDEX('INSERT ', @stTable) > 0)
OR (CHARINDEX('UPDATE ', @stTable) > 0)
OR (CHARINDEX('INTO ', @stTable) > 0)
OR (CHARINDEX('DROP ', @stTable) > 0)
OR (CHARINDEX('TRUNCATE ', @stTable) > 0)
OR (CHARINDEX('MERGE ', @stTable) > 0)
OR (CHARINDEX('EXEC ', @stTable) > 0)
OR (CHARINDEX('EXECUTE ', @stTable) > 0)
OR (CHARINDEX('--', @stTable) > 0)
OR (CHARINDEX(';', @stTable) > 0)
OR (CHARINDEX('XP_', @stTable) > 0)
OR (CHARINDEX('KILL ', @stTable) > 0)
)
BEGIN
THROW 50000,'Only Select statements or schema.object names are allowed as an input',1;
RETURN;
END
/********************************************************************************************/
/************** INTERNAL PARAMETERS **************/
DECLARE @ColumnST AS NVARCHAR(max) = ''
DECLARE @newSelect AS NVARCHAR(max) = ''
DECLARE @ColumnNamesHTML AS NVARCHAR(max) = ''
DECLARE @CSSTableStyle AS NVARCHAR(max) = ''
DECLARE @SelectStatement as NVARCHAR(max) = ''
DECLARE @STErrorMessage as NVARCHAR(max)=''
/************* END INTERNAL PARAMETERS *************/
IF(CHARINDEX('SELECT',@stTable)>0)
BEGIN
SET @SelectStatement = 'SELECT tbl1.* into ##rowstablePreHTML FROM (' + @stTable+') tbl1'
END
ELSE
BEGIN
SET @SelectStatement= 'SELECT tbl1.* into ##rowstablePreHTML FROM ' + @stTable + ' tbl1'
END
BEGIN TRY
EXEC sp_executesql @SelectStatement --Loading table contents on temp table
END TRY
BEGIN CATCH
SET @STErrorMessage ='Syntax related issue with your input, use "<schema>.<table>" or "SELECT <columns> FROM <TABLE>" format. ERROR REPORTED: '+ERROR_MESSAGE();
THROW 50000, @STErrorMessage ,1;
RETURN;
END CATCH;
SET @ColumnST = (
SELECT '[' + COLUMN_NAME + ']' AS 'TH'
FROM tempdb.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE '##rowstablePreHTML'
FOR XML raw('TR'),
elements
) -- Obtain columns for the table
-- performing cleanup task for columns
SET @ColumnST = REPLACE(@ColumnST, '<TR>', '')
SET @ColumnST = REPLACE(@ColumnST, '</TR>', '')
SET @ColumnNamesHTML = '<TR>' + @ColumnST + '</TR>' --Obtaining column names, we will use this later to append to the table
-- Removing [] we put before on the columns
SET @ColumnNamesHTML = REPLACE(@ColumnNamesHTML, '[', '')
SET @ColumnNamesHTML = REPLACE(@ColumnNamesHTML, ']', '')
-- we continue cleanup tasks for columns before creating or dynamic Select
SET @ColumnST = REPLACE(@ColumnST, '<TH>', '')
SET @ColumnST = REPLACE(@ColumnST, '</TH>', 'as TD,') --creating all column names with the same name
SET @ColumnST = LEFT(@ColumnST, LEN(@ColumnST) - 1) -- Removing last comma
-- generating select statement on an HTML friendly format
SET @newSelect = 'SELECT @RawTableStyleOUT =(SELECT ' + isnull(@ColumnST, '') + ' FROM ##rowstablePreHTML For XML RAW(''TR''), ELEMENTS)'
EXEC sp_executesql @newSelect,
N' @RawTableStyleOUT as nvarchar(max) OUTPUT',
@RawTableStyleOUT = @RawTableStyle OUTPUT
IF (@TableStyle = 0) -- no Style
BEGIN
SET @CSSTableStyle = ''
END
IF (@TableStyle = 1) -- black borders
BEGIN
SET @CSSTableStyle = '<style type="text/css">
table, th, td {border: 1px solid; border-collapse: collapse;}
</style>'
END
IF (@TableStyle = 2) -- Grey style
BEGIN
SET @CSSTableStyle = '<style type="text/css">
table, td, tr {border: 1px solid #dddddd; padding: 3px; color: #555555; border-collapse: collapse;}
th {background-color: #dddddd;}
</style>'
END
IF (@TableStyle = 3) -- lightblue borders
BEGIN
SET @CSSTableStyle = '<style type="text/css">
table, td, tr {border: 1px solid #DCDCDC; padding: 2px; color: #808080; border-collapse: collapse;}
th {border: 1px solid #DCDCDC;background-color: #1E90FF;color:#FFFFFF;}
</style>'
END
IF (@TableStyle = 4) -- zebra-striped table
BEGIN
SET @CSSTableStyle = '<style type="text/css">
table, td, tr {border: 1px solid #dddddd; padding: 3px; color: #555555; border-collapse: collapse;}
th {background-color: #CCCCCC;}
tr:nth-child(even) {background-color: #F7F7F7}
</style>'
END
IF(@includeColumnName =1) --IF Column names must be included
BEGIN
SET @RawTableStyle = @ColumnNamesHTML + @RawTableStyle
END
SET @RawTableStyle = @CSSTableStyle + '<TABLE>' + isnull(@RawTableStyle,'') + '</TABLE>'
SELECT @RawTableStyle
END
GO
No comments:
Post a Comment