Hi all,
For those of you who may be interested in occurrences and distinct counts. This store procedure will scan your default database and return each column value for every table.
Note: It takes a long time to run depending on how much data you have in your database.
Code:
create procedure sp_tableinfo
as
BEGIN
DECLARE @table sysname
DECLARE @column sysname
DECLARE @datatype sysname
declare @col_value sysname
DECLARE @data_type_length sysname
DECLARE @sql nvarchar(4000)
SET NOCOUNT ON
--EXEC sp_updatestats
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED -- Will speed things up a bit
CREATE TABLE table_infoname
(table_name sysname NOT NULL
,column_name sysname NOT NULL
,datatype sysname NOT NULL
,data_type_length sysname null
,col_value varchar(7000) NULL
)
DECLARE c CURSOR FAST_FORWARD FOR
SELECT
isc.table_name,
isc.column_name,
isc.data_type,
COALESCE(isc.character_maximum_length, isc.numeric_precision) as data_type_length
FROM information_schema.columns isc
INNER JOIN information_schema.tables ist
ON isc.table_name = ist.table_name
WHERE ist.table_type = 'base table'
AND ist.table_name not like 'dt%'
ORDER BY 1,2
set @sql = ''
OPEN c
FETCH NEXT FROM c INTO @table, @column, @datatype,@data_type_length
WHILE @@FETCH_STATUS = 0
BEGIN
IF @datatype NOT IN ('text', 'ntext', 'image')
BEGIN
SET @sql = 'INSERT INTO table_infoname SELECT DISTINCT ''' + @table + ''', ''' + @column +''',''' + @datatype + ''',''' + @data_type_length + ''', convert(varchar(7000),[' + @column + ']) FROM [' + @table + ']'
END
---PRINT @sql
EXEC(@sql)
FETCH NEXT FROM c INTO @table, @column,@datatype,@data_type_length
END
CLOSE c
DEALLOCATE c
end
Jaime E. Maccou
Applications Analyst