Tuesday, 19 June 2012

how to describe table in sql server 2008

In SQL SERVER 2008 :

There are two ways to describe : 

1)  Here one more solution found with help StackOverflow site

I like the answer that attempts to do the translate, however, while using the code it doesn't like columns that are not VARCHAR type such as BIGINT or DATETIME. I needed something similar today so I took the time to modify it more to my liking. It is also now encapsulated in a function which is the closest thing I could find to just typing describe as oracle handles it. I may still be missing a few data types in my case statement but this works for everything I tried it on. It also orders by ordinal position. this could be expanded on to include primary key columns easily as well.

Step1: Create Function in Database as

CREATE FUNCTION dbo.describe (@TABLENAME varchar(50))
returns table
SELECT TOP 1000 column_name AS [ColumnName],
       IS_NULLABLE AS [IsNullable],
       DATA_TYPE + '(' + CASE
                                    WHEN DATA_TYPE = 'varchar' or DATA_TYPE = 'char' THEN
                                        WHEN Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5)) = -1 THEN 'Max'
                                        ELSE Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5))
                                    WHEN DATA_TYPE = 'decimal' or DATA_TYPE = 'numeric' THEN
                                      Cast(NUMERIC_PRECISION AS VARCHAR(5))+', '+Cast(NUMERIC_SCALE AS VARCHAR(5))
                                    WHEN DATA_TYPE = 'bigint' or DATA_TYPE = 'int' THEN
                                      Cast(NUMERIC_PRECISION AS VARCHAR(5))
                                    ELSE ''
                                  END + ')' AS [DataType]
WHERE  table_name = @TABLENAME
order by ordinal_Position

Step 2:  Create Sample Table

once you create the function here is a sample table that I used
create table dbo.yourtable
(columna bigint,
 columnb int,
 columnc datetime,
 columnd varchar(100),
 columne char(10),
 columnf bit,
 columng numeric(10,2),
 columnh decimal(10,2)

Step 3:  Execute function by following query :

select * from describe (TableNme);

3) exec sp_columns [TABLE_NAME]

Ref : StackOverflow

No comments:

Post a Comment