SqlSever查询某个表的列名称、说明、备注、注释,类型等信息

背景:在工程项目中,有时需要对数据查询进行展示,常规的表格展示虽然能解决大部分问题;但在数据量比较大的情况就如果一次完整的展示信息,势必会造成数据加载中增加耗时,影响数据的展示效果;常规的解决方案都是在数据加载中采取分页的模式,降低数据的加载耗时;但如果要一次想知道满足条件的查询的结果有多少,就得翻阅到最后一页。

在我后期维护别人的项目就遇到不采用分页一次加载数据的问题,还好运维人员只是想在数据展示中增加一列,显示对应数据的编号从1开始。

SqlSever查询某个表的列名称、说明、备注、注释,类型等信息_第1张图片

初步设想很简单在原始的查询结果前增减一列行号信息,因此我觉得在很简单,使用row_number()函数。

SELECT 
row_number() over(order by Age) as rows,
        [ID]
      ,[Name]
      ,[Age]
      ,[Gender]
      ,[Status]
  FROM [HTDWork].[dbo].[test]  where ID>2

SqlSever查询某个表的列名称、说明、备注、注释,类型等信息_第2张图片

因此我查询了一下row_number()的简介:如下所示:

ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。

语法实例:

select *,row_number() over(partition by column1 order by column2) as n
from tablename
在上面语法中:

PARTITION BY子句将结果集划分为分区。 ROW_NUMBER()函数分别应用于每个分区,并重新初始化每个分区的行号。
PARTITION BY子句是可选的。如果未指定,ROW_NUMBER()函数会将整个结果集视为单个分区。
ORDER BY子句定义结果集的每个分区中的行的逻辑顺序。 ORDER BY子句是必需的,因为ROW_NUMBER()函数对顺序敏感

当需求有改动后,如果按照按照名称排序后在按照name分组之后在按照age排序

SELECT 
row_number() over(partition by Name order by Age) as rows,
        [ID]
      ,[Name]
      ,[Age]
      ,[Gender]
      ,[Status]
  FROM [HTDWork].[dbo].[test]
  where ID>2

执行结果如下:

SqlSever查询某个表的列名称、说明、备注、注释,类型等信息_第3张图片

由以上可见row_number()方法在使用是必须跟上row_number() over( order by ColumnName),这样在使用中就有了限制,微软官网介绍:

对 SQL Server 中的查询返回的数据进行排序。 可以使用此子句执行以下操作:

  • 按指定的列列表对查询的结果集进行排序,并有选择地将返回的行限制为指定范围。 除非指定 ORDER BY 子句,否则,不能保证在结果集中返回的行的顺序。

  • 确定将排名函数值应用于结果集的顺序。

语法ÿ

你可能感兴趣的:(sql,数据库)