sql >> データベース >  >> RDS >> Sqlserver

スキーマ名を持つすべてのストアド プロシージャを一覧表示する

    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 句が必要です。



    1. 純粋なMySQLでツリーのルートパスを取得する

    2. MySQLとOracleDatabaseMacOSXをセットアップする

    3. MYSQL-制限によるグループ化

    4. mysqlにレーベンシュタイン関数を追加する方法は?