16

データベース内のすべてのストアド プロシージャをそのスキーマ名とともに一覧表示する方法についてアドバイスできる人はいますか? ありがとう!

4

7 に答える 7

34
SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
  name
FROM sys.procedures;

また

SELECT [schema] = SCHEMA_NAME([schema_id]),
  name
FROM sys.procedures;

特定のデータベースについては、最初にコンテキストをそのデータベースに変更するか、Marc のクエリを少し変更するだけです (この場合、私のクエリはコンテキストに依存する関数に依存しているため、適切ではありません)。

SELECT 
    SchemaName = s.name,
    ProcedureName = pr.name 
FROM 
    databasename.sys.procedures pr
INNER JOIN 
    databasename.sys.schemas s ON pr.schema_id = s.schema_id;

すべてのデータベースに対してこれを行う場合:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
  UNION ALL SELECT db = N''' + name + ''', 
    s.name COLLATE Latin1_General_CI_AI,
    o.name COLLATE Latin1_General_CI_AI
  FROM ' + QUOTENAME(name) + '.sys.procedures AS o
  INNER JOIN ' + QUOTENAME(name) + '.sys.schemas AS s
  ON o.[schema_id] = s.[schema_id]'
FROM sys.databases
-- WHERE ... -- probably don't need system databases at least

SELECT @sql = STUFF(@sql, 1, 18, '') 
  -- you may have to adjust  ^^ 18 due to copy/paste, cr/lf, tabs etc 
  + ' ORDER BY by db, s.name, o.name';

EXEC sp_executesql @sql;

照合順序が異なるデータベースがある場合は、collat​​e 句が必要です。

于 2012-09-27T13:49:40.690 に答える
13

これを試して:

SELECT 
    SchemaName = s.name,
    ProcedureName = pr.name 
FROM 
    sys.procedures pr
INNER JOIN 
    sys.schemas s ON pr.schema_id = s.schema_id

これにより、すべてのストアド プロシージャとそのスキーマ名が結果セットとして一覧表示されます。

両方のビューsys.proceduressys.schemasは、さらに多くの属性があります。それらを確認し、必要に応じてクエリに含めてください。

于 2012-09-27T13:49:14.913 に答える
1

これはあなたを助けるかもしれません..

SELECT * FROM sys.procedures;

于 2014-10-07T11:44:25.420 に答える
0

Script Generator を使用して取得できます。左側のパンで、ストアド プロシージャを取得するデータベースを右クリックし、[タスク] -> [スクリプトの生成] [次へ] をクリックして、[特定のデータベース オブジェクトの選択] を選択し、[ストアド プロシージャ] を選択して [次へ] をクリックします。必要に応じてカスタマイズして、スクリプト。

于 2015-01-05T07:14:14.853 に答える