Instruction SQL pour saisir les noms de tables, les vues et les procédures stockées, ordre par schéma

Existe-t-il une instruction SQL répertoriant les noms de toutes les tables, vues et procédures stockées de la database MS SQL Server, classées par nom de schéma?

Je voudrais générer une feuille de calcul Excel à partir de cette list avec les colonnes: schéma, type (table, vue, procédure stockée) et nom.

Voici ce que vous avez demandé:

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 

Vous pouvez créer une requête en utilisant les vues système INFORMATION_SCHEMA.TABLES , INFORMATION_SCHEMA.VIEWS et INFORMATION_SCHEMA.COLUMNS

Edit: Oh et INFORMATION_SCHEMA.ROUTINES pour les procédures stockées

Commencer avec

 select * from sys.sysobjects 

EDIT: Maintenant avec schéma

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

Il existe des vues système embeddedes que vous pouvez utiliser:

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

Plus d'informations sur MSDN à propos des vues de catalogue .

ESSAYER:

 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 

Essayez ce SQL si vous avez besoin de creuser dans les colonnes et leur type de données. Vous pouvez utiliser ces options pour sysobjects.xtype (U = Table user, P = Proc. Stockée, V = Affichage)

 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 

C'est la déclaration SQL que j'ai fini par utiliser:

 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