查询数据库字段主键,外键,唯一键等相关属性

查询表相关主外键属性:主表,主表字段,外表,外表字段

SELECT *
FROM   (
           SELECT a.*,
                  b.fname
           FROM   (
                      SELECT OBJECT_NAME(rkeyid) rtable,
                             col.name rname,
                             OBJECT_NAME(fkeyid) ftable
                      FROM   sysforeignkeys f
                             INNER JOIN syscolumns col
                                  ON  f.rkeyid = col.id
                                  AND f.rkey = col.colid
                  ) a
                  RIGHT JOIN (
                           SELECT OBJECT_NAME(rkeyid) rtable,
                                  col.name fname,
                                  OBJECT_NAME(fkeyid) ftable
                           FROM   sysforeignkeys f
                                  INNER JOIN syscolumns col
                                       ON  f.fkeyid = col.id
                                       AND f.fkey = col.colid
                       ) b
                       ON  a.rtable = b.rtable
                       AND a.ftable = b.ftable
       ) a
ORDER BY
       ftable



查询字段名,表名,架构名,序号,是否主键,是否外键,是否唯一键,是否为空,是否自动增长,默认值,字段类型,大小,长度,小数位数,相关属性

DECLARE @TableName VARCHAR(50)
SET @TableName = 'BuildingInfo'

SELECT a.*,
       ISNULL(b.rtable, '0') AS RefTable,
       ISNULL(b.rname, '0') AS RefName
FROM   (
           SELECT d.name AS TableName,	--如果表名相同就返回空   
                  a.colorder AS ID,	--字段序号  
                  a.name AS NAME,	--字段名
                  (
                      CASE 
                           WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN 
                                1
                           ELSE 0
                      END
                  ) AS DbIdentity,	--自动增长   
                  (
                      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 1
                           ELSE 0
                      END
                  ) AS PK,	--查询主键END  
                  (
                      CASE 
                           WHEN (
                                    SELECT COUNT(*)
                                    FROM   (
                                               SELECT OBJECT_NAME(f.fkeyid) AS 
                                                      fname,
                                                      col.name,
                                                      f.constid AS temp
                                               FROM   syscolumns col,
                                                      sysforeignkeys f
                                               WHERE  f.fkeyid = col.id
                                                      AND f.fkey = col.colid
                                           ) ft
                                    WHERE  ft.fname = d.name
                                           AND ft.name = a.name
                                ) > 0 THEN 1
                           ELSE 0
                      END
                  ) AS FK,	--查询外键
                  (
                      CASE 
                           WHEN (
                                    SELECT COUNT(COLUMN_NAME)
                                    FROM   INFORMATION_SCHEMA.KEY_COLUMN_USAGE
                                    WHERE  CONSTRAINT_NAME IN (SELECT NAME
                                                               FROM   sys.key_constraints
                                                               WHERE  
                                                                      OBJECT_NAME(parent_object_id) = 
                                                                      d.name
                                                                      AND TYPE = 
                                                                          'UQ')
                                           AND COLUMN_NAME = a.name
                                ) > 0 THEN 1
                           ELSE 0
                      END
                  ) AS UQ,	--查询唯一键	
                  b.name AS DbType,	--字段类型   
                  a.length AS DbLength,	--占用字节数
                  (
                      SELECT TOP 1 TABLE_SCHEMA
                      FROM   information_schema.COLUMNS
                      WHERE  TABLE_NAME = d.name
                  ) AS TableSchema,	--架构
                  COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS DbPrecision,	-- 长度
                  ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) AS DbScale,	-- 小数位数
                  (CASE WHEN a.isnullable = 1 THEN 1 ELSE 0 END) AS DbNull,	--允许空
                  ISNULL(e.text, '') AS DefaultValue --默认值
           FROM   syscolumns a
                  LEFT JOIN systypes b
                       ON  a.xtype = b.xusertype
                  INNER JOIN sysobjects d
                       ON  a.id = d.id
                       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
           WHERE  d.name LIKE @TableName --所要查询的表
       )a
       LEFT JOIN (
                SELECT a.*,
                       b.fname
                FROM   (
                           SELECT OBJECT_NAME(rkeyid) rtable,
                                  col.name rname,
                                  OBJECT_NAME(fkeyid) ftable
                           FROM   sysforeignkeys f
                                  INNER JOIN syscolumns col
                                       ON  f.rkeyid = col.id
                                       AND f.rkey = col.colid
                                       AND OBJECT_NAME(fkeyid) = '表名'
                       ) a
                       INNER JOIN (
                                SELECT OBJECT_NAME(rkeyid) rtable,
                                       col.name fname,
                                       OBJECT_NAME(fkeyid) ftable
                                FROM   sysforeignkeys f
                                       INNER JOIN syscolumns col
                                            ON  f.fkeyid = col.id
                                            AND f.fkey = col.colid
                                            AND OBJECT_NAME(fkeyid) = '表名'
                            ) b
                            ON  a.rtable = b.rtable
            )b
            ON  a.tablename = b.ftable
            AND a.name = b.fname
ORDER BY
       REPLACE(a.Name, '_', '')








  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值