SQL Server查询所有数据库下模式名

Posted ShenLiang2025

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server查询所有数据库下模式名相关的知识,希望对你有一定的参考价值。

SQL Server查询所有数据库下模式名

需求描述

找到SQL Server里所有数据库下的schema.输出格式为数据库名、模式名。

 背景补充

关于SQL Server需要简单介绍下,从数据库对象的粒度上可粗略的分为server、database、schema、table、colmun。这里server相当于instance(实例),一台机器可以装多个实例,一个实例有多个数据库,一个数据库有多个schema(模式),schema相当于把相似的表做个归类。比如零售系统里production模式归档是产品相关的表,sales模式则是销售相关的表。一个模式会有多个table(表),一个表会有多个字段(列)。

 

 思路概述

#1 思路概述

1) 找到显示当前数据库下schema的系统视图。这里对应的是sys.schemas。

2) 找到可以查询所有数据库的系统视图,这里是sys.databases

3) 给所有数据库加个序号,以方便后续遍历。

4)通过WHILE循环匹配 3)里的序号。

5) 拼接动态SQL生成每个数据库查询schema的SQL语句。

6)遍历执行并插入表变量里,最后展示查询结果。

TSQL代码

DECLARE @tb_schemas TABLE
  (
  db_name varchar(200),
    schemas_name varchar(200)
  );
DECLARE @i INT;
DECLARE @sql VARCHAR(300);
SET @i = 1
  BEGIN
    WHILE @i <= (SELECT COUNT(*) FROM sys.databases)
    BEGIN
      SELECT @sql = ' use ' + A.name+';' + 'SELECT '+''''+A.name+''''+ ',name schemas_name FROM sys.schemas' FROM
      (
      SELECT A.name,ROW_NUMBER()OVER(order by database_id)  rn
      FROM 
      sys.databases A
      )A
      WHERE A.rn = @i
      INSERT INTO @tb_schemas EXEC(@sql);
      SET @i = @i + 1
    End
    SELECT DISTINCT db_name,schemas_name FROM @tb_schemas ORDER BY db_name;
  END
-- 封装成存储过程仅需要在代码最前加创建存储语句即可(选做)。

执行结果

 

以上是关于SQL Server查询所有数据库下模式名的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SQL Server 代码片段收集

sqlserver 如何获得所有数据库名 如何获得已知数据库所有表名 和 已知表明获得所有字段名和字段类型

sql server2008怎么实现查询某个数据库中所有的表名

列出 sql server 2012 中的架构名称和所有者

sql server2008如何查询在指定的数据库中所有的表名和每个表的字段名及字段类型

SQL Server2019数据库查询所有数据库名表名表结构表字段主键方法演示,执行sql提示对象名‘user_tab_columns‘ ‘user_cons_columns‘ 无效问题解决