List Columns on Table
More ronseal pages here, this time it's a script to show information on a specific table. This can be sueful when you're getting to know a new database and for copy/pasting out database information for say.. a SQL generating spreadsheet for example:
DECLARE @TableName AS VARCHAR(250)
SET @TableName = 'Persons'
SELECT o.name TableName
, c.name ColumnName
, max_length
, c1.DATA_TYPE
FROM sys.objects o
JOIN sys.columns c ON c.object_id = o.object_id
AND o.is_ms_shipped <> 1
JOIN INFORMATION_SCHEMA.COLUMNS c1 ON c1.TABLE_NAME = o.name
AND c1.COLUMN_NAME = c.name
WHERE
--o.name like '%' + @TableName + '%'
o.name = @TableName
If you're interested in getting more information out (for example you're interested in the precision or length of a datatype) then you might be interested in the below slightly extended version:
-- ListColsFull
DECLARE @TableName AS VARCHAR(250)
SET @TableName = 'workpackage'
SELECT c1.TABLE_SCHEMA 'Schema'
, o.name TableName
, c.name ColumnName
--, c1.ORDINAL_POSITION pos
, max_length
, c1.DATA_TYPE , c1.is_nullable 'Nullable', c1.CHARACTER_MAXIMUM_LENGTH 'CharMaxLen'
, c1.NUMERIC_SCALE 'NumScale', c1.NUMERIC_PRECISION 'NumPrecis', c1.DATETIME_PRECISION 'DtPrecis', c2.CONSTRAINT_NAME
FROM sys.objects o
join sys.schemas sc on sc.schema_id = o.schema_id
JOIN sys.columns c ON c.object_id = o.object_id
AND o.is_ms_shipped <> 1
JOIN INFORMATION_SCHEMA.COLUMNS c1 ON c1.TABLE_NAME = o.name
AND c1.COLUMN_NAME = c.name
and c1.TABLE_SCHEMA = sc.name
left join INFORMATION_SCHEMA.KEY_COLUMN_USAGE c2 on c2.TABLE_NAME = o.name and c2.CONSTRAINT_SCHEMA = c1.TABLE_SCHEMA
WHERE o.name = @TableName
order by c1.TABLE_SCHEMA, o.name, c1.ORDINAL_POSITION