Hey Steve;
Thanks for the code. I tweaked it a little for my situation, added parameter markers, and stuck in my templates...
Pretty handy!
USE <databasename, sysname, >;
SET NOCOUNT ON
DECLARE
@table_name sysname
, @where_clause varchar(MAX)
, @col_names varchar(MAX)
, @variants varchar(MAX)
, @sql varchar(MAX), @DELIM varchar(1)
SELECT @table_name = '<Table Name, sysname, >'
, @where_Clause = '<Where Clause, varchar(max), WHERE F = V>'
, @col_names='', @variants = '', @DELIM = '';
SELECT
@col_names = @col_names + @DELIM +c.column_name,
@variants = @variants + @DELIM + 'CONVERT(SQL_VARIANT, '+c.column_name + ') AS '+c.column_name,
@DELIM = ','
FROM information_schema.columns c
WHERE table_name = @table_name
AND table_schema = 'dbo'
AND data_type NOT IN ('text','ntext','image','timestamp')
ORDER BY c.ordinal_position;
SET @sql = 'SELECT TBLPIVOT.Column_Name, TBLPIVOT.Value
FROM (
SELECT ' + @variants + ' FROM ' + @table_name + ' ' + @where_clause + ') x
UNPIVOT (VALUE FOR Column_Name IN (' + @col_names + ')) AS TBLPIVOT';
EXEC(@sql);
Cheers,
Mark
Just a cog in the wheel.