基于SQL2005 SQL2008 表结构信息查询升级版的详解(含外键信息)_mssql2005

SELECT
表名=CASE WHEN a.colorder = 1 THEN d.name ELSE '' END,
表说明=CASE WHEN a.colorder = 1 THEN isnull(f.value, '') ELSE '' END ,
字段序号=a.colorder ,
字段名=a.name ,
标识=CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√' ELSE '' END ,
主键=CASE WHEN EXISTS (
  SELECT 1
  FROM dbo.sysindexes si
  INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid
  INNER JOIN dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid
  INNER JOIN dbo.sysobjects so ON so.name = so.name AND so.xtype = 'PK'
  WHERE sc.id = a.id AND sc.colid = a.colid) THEN '√'
  ELSE ''
 END ,
 外键=CASE WHEN tony.fkey is not null and tony.fkey=a.colid THEN '√' ELSE '' END ,
 外键表=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
THEN object_name(tony.fkeyid) ELSE ''
   END ,
 外键字段=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
 THEN (SELECT name FROM syscolumns
   WHERE colid=tony.fkey AND id=tony.fkeyid)  
 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], ''),
 创建时间=d.crdate,
 更改时间=CASE WHEN a.colorder = 1 THEN d.refdate ELSE NULL END
FROM dbo.syscolumns a
LEFT JOIN dbo.systypes b ON a.xtype = b.xusertype
INNER JOIN dbo.sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.status >= 0
LEFT JOIN dbo.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.major_id AND f.minor_id = 0 
LEFT JOIN sysobjects htl ON htl.parent_obj=d.id AND htl.xtype='F'
LEFT JOIN sysforeignkeys tony on htl.id=tony.constid
WHERE d.name='tb'  --这里输入包含表名称的条件
ORDER BY d.id, a.colorder

时间: 2024-08-29 06:35:39

基于SQL2005 SQL2008 表结构信息查询升级版的详解(含外键信息)_mssql2005的相关文章

Yii基于数组和对象的Model查询技巧实例详解_php实例

本文实例讲述了Yii基于数组和对象的Model查询技巧.分享给大家供大家参考,具体如下: 对于一个Model Post 有如下的4中查询方法,返回对象或者对象数组. //查找满足指定条件的结果中的第一行 find the first row satisfying the specified condition $post=Post::model()->find($condition,$params); //查找具有指定主键值的那一行 find the row with the specified

探讨SQL利用INFORMATION_SCHEMA系统视图如何获取表的主外键信息_Mysql

接着上篇文章<解析SQL 表结构信息查询 含主外键.自增长>里面提到了INFORMATION_SCHEMA视图,其实到了SQL 2005微软都主推大家使用INFORMATION_SCHEMA系统视图,而不是在使用sys东东了,当然目前还是有许多信息只能通过sys视图来查询.这里我们还是以查询表结果信息为例来说明一些主要的INFORMATION_SCHEMA视图的使用.首先我们需要查询列的信息,这需要用到[INFORMATION_SCHEMA].[COLUMNS]系统视图来查询数据列的信息,SQ

提高数据库查询效率的实用方法、外键关于性能

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0   3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引

SQL Server 树形表非循环递归查询的实例详解_MsSql

很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例. --通过子节点查询父节点 WITH TREE AS( SELECT * FROM Areas WHERE id = 6 -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.PId = Areas.Id ) SELECT Area FROM TREE --通过父节点查询子节点 WIT

SQL Server 树形表非循环递归查询的实例详解

很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例. --通过子节点查询父节点 WITH TREE AS( SELECT * FROM Areas WHERE id = 6 -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.PId = Areas.Id ) SELECT Area FROM TREE --通过父节点查询子节点 WIT

Yii2中hasOne、hasMany及多对多关联查询的用法详解

前言 hasOne.hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们.为什么?因为这种方式关联查询出来的结果会保留Yii2自有的表头排序功能,以及CheckboxColumn中input的id存值,至于还有没有其它的好处就需要大家去挖掘了,笔者目前就发现了这两个常用的好处.其他的关联查询,像yiidbQuery查询或者原生的SQL语句查询都没有,查询出来在列表展示的时候,表头一排黑. Yii2的hasOne.hasMany多表关联查询,不管是文档还是

Perl中捕获警告信息、异常信息并写入日志详解

  这篇文章主要介绍了Perl中捕获警告信息.异常信息并写入日志详解,本文分别给出了捕获警告--不处理.捕获警告--并转换成异常.捕获警告--并写入日志.捕获并写日志的完整例子等实用实例,需要的朋友可以参考下 虽然建议在每个Perl脚本和模块中开启警告,可是你又不想用户看到Perl发出的警告. 一方面你想在代码前面使用use warnings作为你的安全网,另一方面,通常警告会出现在屏幕上.多数情况下,客户不知道如何处理这些警告.如果幸运的话这些警告仅仅让客户惊讶一下,当然,不幸的是他们尝试着去

基于原生ajax与封装的ajax使用方法(详解)

当我们不会写后端接口来测试ajax时,我们可以使用node环境来模拟一个后端接口. 1.模拟后端接口可参考网站整站开发小例子,在打开命令窗口并转到所在项目文件夹下在命令行中输入npm install express --save,安装express中间件. 2.把当中的app.js的内容换成 var express=require('express'); //var path=require('path'); var app=express(); //app.set('view',path.jo

查询表主键外键信息的SQL

我的BSOOC里需要一个查询表主键外键信息的SQL,昨晚研究到凌晨1点,终于能实现这个目标:Oracle:select o.obj# as objectId, o.name AS tableName, oc.name AS constraintName,       decode(c.type#, 1, 'C', 2, 'P', 3, 'U',              4, 'R', 5, 'V', 6, 'O', 7,'C', '?') as constraintType,        c