2012-02-07 11 views
10

sé que puedo obtener acceso a las propiedades de columna a través de:¿Dónde encuentro los metadatos del servidor SQL para los tipos de datos de columna?

select * 
from sysobjects 

Lo que no puedo encontrar sin embargo, es la información acerca de dónde obtener el tipo y el tipo de longitud de una columna, es decir: en

FOO VARCHAR(80) 

¿Dónde busco encontrar la parte "VARCHAR (80)" de la declaración de tipo en las tablas de metadatos?

Intenté mirar la tabla systypes, pero sus valores para xtype no coinciden con los valores de xtype en la tabla sysobjects.

* No tengo acceso al SQL original utilizado para compilar estas tablas ni tengo ningún derecho de administrador.

Si está familiarizado con DB2 Busco el equivalente a

select name, 
     coltype, 
     length, 
    from sysibm.syscolumns 
where tbname = 'FOO' 

Respuesta

14

Usted está cerca. Puede mirar sys.columns para obtener las columnas.

Puede filtrar en una tabla con OBJECT_ID=OBJECT_ID('dbo.Foo').

Puede obtener la longitud desde sys.columns. El tipo de datos está en el campo system_type. Las claves para ese campo están en sys.types.

en su totalidad que puede hacer:

select object_NAME(c.object_id), c.name, t.name, c.max_length 
from sys.columns c 
INNER JOIN sys.types t 
    ON t.system_type_id = c.system_type_id 

Como nota al margen, en SQL Server del sistema de tablas están en desuso (es decir syscolumns, sysobjects) y se recomienda como una buena práctica de utilizar las vistas en cambio, sys.columns, sys.objects, etc.

Esto le dará la tabla, columna, tipo de datos y longitud máxima para cada uno.

+7

La unirse debería usar t.user_type_id en lugar de c.user_type_id. Si la columna es un campo definido por el usuario, obtendrá múltiples resultados para cada uno. join sys.types t on t.user_type_id = c.system_type_id –

4

La forma correcta de hacer esto es unirse a usuario _type_id en la tabla sys.types:

select object_NAME(c.object_id), c.name, t.name, c.max_length 
from sys.columns c 
INNER JOIN sys.types t 
    ON t.user_type_id = c.user_type_id 

user_type_id es idéntica a system_type_id para este tipo de sistema - consulte la documentación: https://msdn.microsoft.com/en-gb/library/ms188021.aspx

Cuestiones relacionadas