I know that I can get access to column properties via:
select *
from sysobjects
What I can't find however is information about where to get the type and type length for a column, ie: in
FOO VARCHAR(80)
Where do I look to find the "VARCHAR(80)" part of the type declaration in the metadata tables?
I tried looking at the systypes table, but its values for xtype do not match up to the values of xtype in the sysobjects table.
*I do not have access to the original SQL used to build these tables nor do I have any admin rights.
If you're familiar with DB2 I'm looking for the equivalent to
select name,
coltype,
length,
from sysibm.syscolumns
where tbname = 'FOO'
The correct way to do this is to join to user_type_id in the sys.types table:
user_type_id
is identical to system_type_id for system types - see documentation: https://msdn.microsoft.com/en-gb/library/ms188021.aspxYou are close. You can look at
sys.columns
to get the columns.You can filter on a table with
OBJECT_ID=OBJECT_ID('dbo.Foo')
.You can get the length from
sys.columns
. The data type is in thesystem_type
field. The keys for that field are insys.types
.In it's entirety you can do:
As a side note, in SQL Server the system tables are deprecated (i.e.
syscolumns
,sysobjects
) and it's recommended as a best practice to use the views instead,sys.columns
,sys.objects
, etc.This will give you Table, column, data type, and maxlength for each one.