MS SQL查询库、表、列数据结构信息汇总

前言

一般情况我们下,我们是知道数据库的表、列信息的(因为数据库是我们手动设计),但特殊情况下,如果你只能拿到数据库连接信息,也就是知道的一个数据库名的情况下,你要怎么得到它下面的所有表名,所有列表,以及主键,是否自增?等这些信息,那么本文将给您揭晓这个答案。

内容

废话不多说,直接上码,一码永逸,希望与大家共享。

1、某数据库下的所有表。

代码如下:

SELECT TABLE_NAME FROM 数据库名.INFORMATION_SCHEMA.TABLES 

结果如图:

2、某表的所有字段。

代码如下:

SELECT NAME FROM DBO.SYSCOLUMNS WHERE DBO.SYSCOLUMNS.ID=(
    SELECT ID FROM DBO.SYSOBJECTS WHERE DBO.SYSOBJECTS.XTYPE = 'U' AND NAME='表名')

结果如图:

3、查询某表中的主键。

代码如下:

EXEC SP_PKEYS 表名

结果如图:

4、查询主键是否为自增。

代码如下:

IF EXISTS(SELECT TOP 1 1 FROM SYSCOLUMNS SC WHERE SC.ID = 
    (SELECT ID FROM DBO.SYSOBJECTS WHERE DBO.SYSOBJECTS.XTYPE = 'U' AND NAME='表名')
    AND COLUMNPROPERTY(SC.ID, SC.NAME, 'ISIDENTITY') = 1)
SELECT 1 as 'ISIDENTITY'
ELSE SELECT 0 as 'ISIDENTITY'

结果如图:

5、查询所有字段的类型。

 代码如下:

SELECT (SELECT NAME FROM DBO.SYSTYPES WHERE DBO.SYSTYPES.XUSERTYPE=SYSCOLUMNS.XTYPE) AS FILEDTYPE
    FROM DBO.SYSCOLUMNS WHERE DBO.SYSCOLUMNS.ID=(
    SELECT ID FROM DBO.SYSOBJECTS WHERE DBO.SYSOBJECTS.XTYPE = 'U' AND NAME='表名')

结果如下:

结束

拥有以上代码,基本在数据库“反射”查询的时候,能派上用处,也基本够用了,其原理就是利用SqlServer的内置函数,系统存储方法,以系统表(sysobjects、syscolumns)的id为主导线,展开的查询,其中sysobjects的id等于syscolumns表中的id,注意,每修改一次表结构(即数据列)这个id都会发生改变。

祝大家好运,如果觉得有用,请点击支持,谢谢。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的django

14.MySQL(二) 数据之表操作表内容操作Mysql 连接事务外键

数据之表操作 1.创建表 语法:CREATE TABLE table_name (column_name column_type); create table...

37290
来自专栏乐沙弥的世界

使用导出导入(datapump)方式将普通表切换为分区表

      随着数据库数据量的不断增长,有些表需要由普通的堆表转换为分区表的模式。有几种不同的方法来对此进行操作,诸如导出表数据,然后创建分区表再导入数据到分区...

7710
来自专栏WindCoder

Discuz数据库security_failedlog错误及修复

最近跑了之前的论坛转了转,发现一直在报数据库中表security_failedlog错误,百度了好久,最终找到解决方案。

56310
来自专栏游戏杂谈

Node.js调用mysql的存储过程

例子仅在windows下测试通过,没有放在linux下测试。如有问题,可以电邮给我~

20110
来自专栏杨建荣的学习笔记

MySQL和Oracle中唯一性索引的差别(r12笔记第83天)

今天在修复MySQL数据的时候,发现一个看起来“奇怪”的问题。 有一个表里存在一个唯一性索引,这个索引包含3个列,这个唯一性索引的意义就是通过这3个列...

36560
来自专栏java达人

oracle、mysql 分页查询比较

1、 Oracle的分页查询语句 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * ...

39790
来自专栏左瞅瞅,右瞅瞅

SaltStack——小叙(远程执行)

想要返回结果返回mysql 库中,返回是salt-minion 返回,所有的salt-minion 需要安装Mysql-python 依赖包:

22940
来自专栏Netkiller

数据库记录安全解决方案

数据库记录安全解决方案 http://netkiller.github.io/journal/mysql.security.html 摘要 数据库记录防删除,放...

42460
来自专栏算法channel

MySQL|索引应用

可以先看下这篇理论介绍: MySQL|索引背后 01 MySQL的几种KEY PRIMARY KEY 有两个作用,一是约束作用(constraint),用来...

35370
来自专栏乐沙弥的世界

Oracle 测试常用表BIG_TABLE

创建测试用表,DBA经常用到,通常都是基于dba_objects来创建的比较多。本文根据Tom大师的big_table进行了整理,供大家参考。

16820

扫码关注云+社区

领取腾讯云代金券