暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

小白菜系列之——SQLServer数据库的系统视图查询

原创 GaussDB数据库 2022-04-25
2835

文章转自华为云社区,作者:小糖饼最甜呀;原文链接:https://bbs.huaweicloud.com/blogs/349364

今天总结了一部分SQLServer数据库的查询系统视图的SQL语句,特来记录并分享一下。
查询内容主要分为两部分:

  • 查询系统视图。
  • 查询字段类型并转换。

先简单说明一下什么是视图?

视图:视图是一个在基础表上通过sql语句创建的虚拟的表。

系统数据则理解为数据库系统的视图,创建数据库时就有了。系统数据库与用户数据库都有系统视图。

SQL语句分享

该SQL语句用于显示指定表名的字段序号、字段名、字段类型、注释内容。

// tablename替换成需要查询的表名
SELECT row_number() OVER(ORDER BY column_id) AS num, col.name, t.name AS type, CONVERT(nvarchar(200), ep.value) AS remark 
FROM sysobjects obj 
LEFT JOIN sys.columns col ON obj.id = col.object_id 
LEFT JOIN sys.extended_properties ep ON ep.major_id = obj.id AND ep.minor_id = col.column_id 
LEFT JOIN dbo.systypes t ON col.system_type_id = t.xusertype 
WHERE obj.name='tablename'

这是一个很长的SQL语句,且该SQL语句涉及的系统视图较多,大家也可以使用select语句自己查看一下这些系统视图中的内容。

视图内容查询

系统视图的内容查询方式与表是一样的。下面以sys.tables视图为例,其他系统视图类似。
// 查询数据库中sys.tables中的所有的信息

// sys.tables是系统表
SELECT * FROM sys.tables

JOIN说明

用于在数据库中连接两个表,数据库连接方式分别是:

  • INNER JOIN
  • LEFT JOIN
  • RIFHT JOIN
  • FULL JOIN

其中除了INNER JOIN是内连接外,其他三种都是OUTER JOIN。即:

  • INNER JOIN:内连接,左右两个表取连接条件的交集;
  • LEFT OUTER JOIN:以左边表为准,显示左表所有内容,若是右表按照条件有内容,则显示对应内容,若无,显示null;
  • RIFHT OUTER JOIN:以右边表为准,显示右表所有内容,若是左表按照条件有内容,则显示对应内容,若无,显示null;
  • FULL OUTER JOIN:显示左右两个表的并集,若按照条件无内容,则对应显示null;

CONVERT说明

查询语句中使用CONVERT进行数据类型转换。而进行数据类型转换前,需要先查询确认原始数据类型,才能正确使用CONVERT函数。

  • 用于查询字段的数据类型
    查询sys.extended_properties中的字段类型语句如下:
// fieldname替换成需要查询的字段名
SELECT SQL_VARIANT_PROPERTY(fieldname, 'BaseType') FROM sys.extended_properties
  • 用于字段类型转换
    假设字段的数据类型是nvarchar,则进行类型转换如下:
// fieldname替换成需要查询的字段名,且该字段的数据类型是nvarchar
SELECT CONVERT(nvarchar(200), fieldname) as remark from sys.extended_properties

最后,如有问题,欢迎指出。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论