SQL SERVER获取数据库中所有表名 XTYPE类型

时间:2022-11-30 13:51:54

 SELECT (case when a.colorder=1 then d.name else null end) 表名,    

 a.colorder 字段序号,a.name 字段名, 
 (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,  
  (case when (SELECT count(*) FROM sysobjects    

 WHERE (name in (SELECT name FROM sysindexes   

  WHERE (id = a.id) AND (indid in    

 (SELECT indid FROM sysindexkeys    

 WHERE (id = a.id) AND (colid in   
(SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))   

 AND (xtype = 'PK'))>0 then '√' else '' end) 主键,b.name 类型,a.length 占用字节数,   
COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,   
 isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,(case when a.isnullable=1 then '√'else '' end) 允许空,   
 isnull(e.text,'') 默认值,isnull(g.[value], ' ') AS [说明] FROM  syscolumns a  

 left join systypes b on a.xtype=b.xusertype   

 inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'  

left join syscomments e on a.cdefault=e.id   

 left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id

left join sys.extended_properties f on d.id=f.class and f.minor_id=0

where b.name is not null 
 --WHERE d.name='要查询的表' --如果只查询指定表,加上此条件

 order by a.id,a.colorder 

sysobjects 表 
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。 
列名 数据类型 描述 
name sysname 对象名。 
Id int 对象标识号。 
xtype char(2) 对象类型。可以是下列对象类型中的一种: 
C = CHECK 约束 
D = 默认值或 DEFAULT 约束 
F = FOREIGN KEY 约束 
L = 日志 
FN = 标量函数 
IF = 内嵌表函数 
P = 存储过程 
PK = PRIMARY KEY 约束(类型是 K) 
RF = 复制筛选存储过程 
S = 系统表 
TF = 表函数 
TR = 触发器 
U = 用户表 
UQ = UNIQUE 约束(类型是 K) 
V = 视图 
X = 扩展存储过程 
uid smallint 所有者对象的用户 ID。 
info smallint 保留。仅限内部使用。 
status int 保留。仅限内部使用。 
base_schema_ 
ver int 保留。仅限内部使用。 
replinfo int 保留。供复制使用。 
parent_obj int 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。 
crdate datetime 对象的创建日期。 
ftcatid smallint 为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。 
schema_ver int 版本号,该版本号在每次表的架构更改时都增加。 
stats_schema_ 
ver int 保留。仅限内部使用。 
type char(2) 对象类型。可以是下列值之一: 
C = CHECK 约束 
D = 默认值或 DEFAULT 约束 
F = FOREIGN KEY 约束 
FN = 标量函数 
IF = 内嵌表函数 
K = PRIMARY KEY 或 UNIQUE 约束 
L = 日志 
P = 存储过程 
R = 规则 
RF = 复制筛选存储过程 
S = 系统表 
TF = 表函数 
TR = 触发器 
U = 用户表 
V = 视图 
X = 扩展存储过程 
userstat smallint 保留。 
sysstat smallint 内部状态信息。 
indexdel smallint 保留。 
refdate datetime 留作以后使用。 
version int 留作以后使用。 
deltrig int 保留。 
instrig int 保留。 
updtrig int 保留。 
seltrig int 保留。 
category int 用于发布、约束和标识。 
cache smallint 保留。   

可以很方便的用 
select * from sysobjects where xtype='TR' and parent_obj=object_id('表名') 
查出表的信息

syscolumns表内的xtype

查了一下,这些东西都是存于每一个数据库的syscolumns表里面得,name就是列名,xtype就是数据类型,但是这个xtype是数字的,下面是数字和数据类型对应的关系;

xtype=34 'image' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype= 35 'text' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=36 'uniqueidentifier' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=48 'tinyint' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=52 'smallint' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=56 'int' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=58 'smalldatetime' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=59 'real' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=60 'money' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=61 'datetime' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=62 'float' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=98 'sql_variant' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=99 'ntext' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=104 'bit' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=106 'decimal' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=108 'numeric' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=122 'smallmoney' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=127 'bigint' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=165 'varbinary' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=167 'varchar'

SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=173 'binary' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=175 'char' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=189 'timestamp' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=231 'nvarchar'

SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=239 'nchar' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=241 'xml' 
SQL SERVER获取数据库中所有表名 XTYPE类型 xtype=231 'sysname'