Last active
April 4, 2019 23:33
-
-
Save ConstantineK/6225fb6614cb5c11d640c45b037e144d to your computer and use it in GitHub Desktop.
Take a SQL Server object (view, table), grab its columns, count distinct its values, and return them in descending order of cardinality
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR ALTER procedure #data_sampler | |
( | |
@schema_name NVARCHAR(128) = 'dbo', | |
@object_name NVARCHAR(128) | |
) | |
AS | |
BEGIN | |
SET NOCOUNT ON; | |
DECLARE | |
@SQL NVARCHAR(MAX) = | |
' | |
SELECT * | |
FROM | |
( | |
SELECT | |
/*column_list_with_distinct*/ | |
FROM ' + QUOTENAME(@schema_name) + '.' + QUOTENAME(@object_name)+' AS t | |
) AS summary | |
UNPIVOT | |
( | |
row_count | |
FOR | |
table_name IN | |
( | |
/*column_list*/ | |
) | |
) AS unp | |
ORDER BY | |
row_count DESC | |
', | |
@column_list_with_distinct NVARCHAR(MAX), | |
@column_list NVARCHAR(MAX), | |
@magic_value NVARCHAR(73) = '39EACB36-3C89-4E6B-A488-15F8F7E5D363-9CC5643D-8F87-422D-BA48-34A28029CE7B' | |
SELECT | |
@column_list_with_distinct = | |
STRING_AGG | |
( | |
CONVERT | |
( | |
NVARCHAR(MAX), | |
CONCAT | |
( | |
'COUNT(DISTINCT CASE WHEN ', | |
QUOTENAME(c.name), | |
' IS NULL THEN @magic_value ELSE CONVERT(VARCHAR(MAX),', | |
QUOTENAME(c.name), | |
') END ) AS ', | |
QUOTENAME(c.name) | |
) | |
), | |
CONCAT | |
( | |
',', | |
CHAR(10), | |
CHAR(9), | |
CHAR(9) | |
) | |
), | |
@column_list = | |
STRING_AGG(QUOTENAME(c.name), ',') | |
FROM sys.objects AS so | |
JOIN sys.schemas AS s ON | |
s.schema_id = so.schema_id | |
JOIN sys.columns AS c ON | |
so.object_id = c.object_id | |
WHERE | |
so.name = @object_name | |
AND s.name = @schema_name | |
END | |
SET @SQL = REPLACE(REPLACE(@SQL,'/*column_list_with_distinct*/',@column_list_with_distinct),'/*column_list*/',@column_list) | |
EXEC sp_executesql @SQL, N'@magic_value NVARCHAR(73)', @magic_value = @magic_value | |
GO |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment