ALTER PROCEDURE UNPIVOTTABLE
(
@TABLENAME AS VARCHAR(MAX),
@WHERECLAUSE AS VARCHAR(MAX) = NULL
)
AS
BEGIN
DECLARE @COLUMN_NAME_ORIGNAL AS VARCHAR(MAX)
DECLARE @COLUMN_NAME AS VARCHAR(MAX)
DECLARE @SQL AS VARCHAR(MAX)
SET @COLUMN_NAME = ''
SET @SQL = ''
SET @COLUMN_NAME_ORIGNAL = ''
SELECT
@COLUMN_NAME_ORIGNAL = @COLUMN_NAME_ORIGNAL + COLUMN_NAME + ','
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TABLENAME
SELECT
@COLUMN_NAME = @COLUMN_NAME + 'ISNULL(' + 'CAST(' + CAST(ISNULL(COLUMN_NAME,'') AS NVARCHAR(MAX)) + ' AS VARCHAR(MAX)) ,'+ CHAR(39) + '' + CHAR(39) + ') '+ COLUMN_NAME + ','
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TABLENAME
SELECT @COLUMN_NAME = SUBSTRING(@COLUMN_NAME,0,LEN(@COLUMN_NAME))
SELECT @COLUMN_NAME_ORIGNAL = SUBSTRING(@COLUMN_NAME_ORIGNAL,0,LEN(@COLUMN_NAME_ORIGNAL))
SET @SQL = 'SELECT ' + @COLUMN_NAME + ' INTO ##TEMPUNPIVOT FROM ' + @TABLENAME + + CASE WHEN @WHERECLAUSE IS NULL THEN '' ELSE ' WHERE ' + @WHERECLAUSE END
EXEC (@SQL)
--SELECT @COLUMN_NAME_ORIGNAL
--SELECT * from ##TEMPUNPIVOT
SET @SQL = 'SELECT COLUMN_NAME,COLUMN_VALUE FROM (
SELECT ' + @COLUMN_NAME_ORIGNAL
+ ' From ##TEMPUNPIVOT
) OBJ
UNPIVOT (
COLUMN_NAME FOR
COLUMN_VALUE IN ('
+ @COLUMN_NAME_ORIGNAL + '
)
) AS UNpvt'
--PRINT @SQL
EXEC (@SQL)
DROP TABLE ##TEMPUNPIVOT
END
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment