用于获取表名、视图和存储过程的 SQL 语句,按模式排序

Posted

技术标签:

【中文标题】用于获取表名、视图和存储过程的 SQL 语句,按模式排序【英文标题】:SQL statement to grab table names, views, and stored procs, order by schema 【发布时间】:2010-03-25 14:10:29 【问题描述】:

是否有一条 SQL 语句将列出 MS SQL Server 数据库中所有表、视图和存储过程的名称,按模式名称排序?

我想从此列表生成一个 Excel 电子表格,其中包含以下列:架构、类型(表、视图、存储过程)和名称。

【问题讨论】:

【参考方案1】:

这是您要求的:

select 
    s.name as [Schema], 
    o.type_desc as [Type],
    o.name as [Name] 
from
    sys.all_objects o
    inner join sys.schemas s on s.schema_id = o.schema_id 
where
    o.type in ('U', 'V', 'P') -- tables, views, and stored procedures
order by
    s.name

【讨论】:

【参考方案2】:

您可以使用系统视图INFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.VIEWSINFORMATION_SCHEMA.COLUMNS 创建查询

编辑:哦,INFORMATION_SCHEMA.ROUTINES 用于存储过程

【讨论】:

【参考方案3】:

这是我最终使用的 SQL 语句:

SELECT   
      CASE so.type
           WHEN 'U' THEN 'table'
           WHEN 'P' THEN 'stored proc'
           WHEN 'V' THEN 'view'
      END AS [type],
      s.name AS [schema],
      so.[name] AS [name]
FROM sys.sysobjects so
JOIN sys.schemas s
ON so.uid = s.schema_id
WHERE so.type IN ('U', 'P', 'V')
ORDER BY [type], [schema], [name] asc

【讨论】:

【参考方案4】:

开始

select * from sys.sysobjects

编辑:现在使用架构

select * from sys.sysobjects
inner join sys.schemas on sys.sysobjects.uid = sys.schemas.schema_id

【讨论】:

【参考方案5】:

您可以使用一些内置的系统视图:

sys.views sys.tables sys.procedures sys.schema

有关Catalog Views 的更多信息在 MSDN 上。

【讨论】:

【参考方案6】:

试一试:

SELECT
    ROUTINE_SCHEMA,ROUTINE_TYPE ,ROUTINE_NAME
    FROM INFORMATION_SCHEMA.ROUTINES
UNION 
SELECT 
    TABLE_SCHEMA,TABLE_TYPE,TABLE_NAME 
    FROM INFORMATION_SCHEMA.TABLES
UNION 
SELECT 
    TABLE_SCHEMA,'VIEW' ,TABLE_NAME
    FROM INFORMATION_SCHEMA.VIEWS
    ORDER BY ROUTINE_SCHEMA,ROUTINE_TYPE ,ROUTINE_NAME

【讨论】:

【参考方案7】:

如果您还需要深入研究列及其数据类型,请尝试使用此 SQL。您可以将这些选项用于 sysobjects.xtype(U = 用户表,P = 存储过程,V = 视图)

SELECT   object_type = sysobjects.xtype,
     table_name = sysobjects.name,
     column_name = syscolumns.name,
     datatype = systypes.name,
     length = syscolumns.length
FROM sysobjects 
JOIN syscolumns ON sysobjects.id = syscolumns.id
JOIN systypes ON syscolumns.xtype=systypes.xtype
   WHERE sysobjects.xtype='U' AND 
syscolumns.name LIKE '%[column_name_here]%' 
AND sysobjects.name LIKE '%[table or Stored Proc Name]%' 
ORDER BY sysobjects.name,syscolumns.colid

【讨论】:

以上是关于用于获取表名、视图和存储过程的 SQL 语句,按模式排序的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 存储过程,用于捕获表名以及该表名的记录数

SQL基础随记2 视图 存储过程

数据库基础详解:存储过程、视图、游标、SQL语句优化以及索引

sql server创建视图添加where条件,条件包含一个参数

sql 视图 存储过程 的区别?

Sql 2000系统表 语句查询表结构