SQL 某一列是不是关键字的判断,

时间:2022-01-08 17:00:59
由于写一个代码自动生成工具,需要找一些读系统数据字典的信息,
以前有个写一个很不错的,
SQL 某一列是不是关键字的判断,SELECT   表名 = case   when  a.colorder = 1   then  d.name  else   ''   end , 字段序号 = a.colorder, 字段名 = a.name, 标识 = case   when   COLUMNPROPERTY ( a.id,a.name, ' IsIdentity ' ) = 1   then   ' ' else   ''   end , 主键 = case   when   exists ( SELECT   1   FROM  sysobjects  where  xtype = ' PK '   and  name  in  (   SELECT  name  FROM  sysindexes  WHERE  indid  in (    SELECT  indid  FROM  sysindexkeys  WHERE  id  =  a.id  AND  colid = a.colid  )))  then   ' '   else   ''   end , 类型 = b.name, 占用字节数 = a.length, 长度 = COLUMNPROPERTY (a.id,a.name, ' PRECISION ' ), 小数位数 = isnull ( COLUMNPROPERTY (a.id,a.name, ' Scale ' ), 0 ), 允许空 = case   when  a.isnullable = 1   then   ' ' else   ''   end , 默认值 = isnull (e. text , '' ), 字段说明 = isnull (g. [ value ] , '' ) 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  sysproperties g  on  a.id = g.id  and  a.colid = g.smallid   order   by  a.id,a.colorder
SQL 某一列是不是关键字的判断,

我也按字的方法来读,
但是今天发现,主键,信息不是很正确,
一看代码,读主键,那要跟索引结合起来的,

于是上网找相关资料,找了半天,也没有找到,
于是就自己看SQL server的帮助,
最后发现,
syscolumns的status为128就是主键,
SQL 某一列是不是关键字的判断,SELECT  ColumnName  =  a.name, Type  =  b.name,Length3  = COLUMNPROPERTY (a.id,a.name, ' PRECISION ' ), 
SQL 某一列是不是关键字的判断,IsKey 
=   CASE  a.status  WHEN   128
SQL 某一列是不是关键字的判断,
THEN   ' 1 '   ELSE   ' 0 '   END
SQL 某一列是不是关键字的判断,
SQL 某一列是不是关键字的判断,Length1 
=  a.length, Length2  =   isnull ( COLUMNPROPERTY (a.id, a.name,  ' Scale ' ),  0 ),IsIdentity  =   CASE   WHEN   COLUMNPROPERTY (a.id, a.name,  ' IsIdentity ' )   =   1   THEN   ' 1 '   ELSE   ' 0 '   END  
SQL 某一列是不是关键字的判断,
FROM  syscolumns a  LEFT   JOIN  
SQL 某一列是不是关键字的判断,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  
SQL 某一列是不是关键字的判断,
JOIN   syscomments e  ON  a.cdefault  =  e.id  LEFT   JOIN   sysproperties g  ON  a.id  =  g.id  AND  a.colid  =  g.smallid 
SQL 某一列是不是关键字的判断,
WHERE  d .name  =   ' Users '   ORDER   BY  a.id, a.colorder