名前でストアドプロシージャを検索する


83

SQL Server Management Studioのストアドプロシージャを名前または名前の一部で見つける方法はありますか?(アクティブなデータベースコンテキストで)

手伝ってくれてありがとう

回答:


141

次を使用できます。

select * 
from 
   sys.procedures 
where 
   name like '%name_of_proc%'

コードが必要な場合は、syscommentsテーブルを参照してください

select text 
from 
    syscomments c
    inner join sys.procedures p on p.object_id = c.object_id
where 
    p.name like '%name_of_proc%'

更新の編集:

ANSI標準バージョンを使用することもできます

SELECT * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_NAME LIKE '%name_of_proc%'

1
spのテキストを名前で取得したい場合は、「sp_helptextSPNAME」を使用すると簡単です
Harry Sarshogh 2017年

2
inner join sys.procedures p on p.object_id = c.id
Sql

1
SQL Serverの場合、ANSI標準バージョンは8kでROUTINE_DEFINITIONをカットオフすることに注意してください。object_definition(object_id(r.ROUTINE_NAME)),代わりに問題となるものを使用することができます。
Mark Schultheiss 2018年

プロシージャがどこにあるかわからない場合にカタログ(データベース)とスキーマを返すANSI標準バージョンの場合は+1。(例として、簡単に見つけることができなかったプロシージャを参照するエージェントジョブを見つけました。ANSI標準クエリでこれを解決しました)。
youcantryreachingme 2018

42

F7ストアドプロシージャのリストを表示しているオブジェクトエクスプローラーの詳細()を表示している場合は、[フィルター]ボタンをクリックして、名前(または名前の一部)を入力します。

代替テキスト


2
どういうわけかそのボタンを見たことがないので、フィルターのことを知らなかったので、どうもありがとうございました。
チャドポートマン2016年

5

これは、sprocだけでなく、(とりわけ)テーブルとビューでも機能します。

SELECT
    '[' + s.name + '].[' + o.Name + ']',
    o.type_desc
FROM
    sys.objects o
    JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE
    o.name = 'CreateAllTheThings' -- if you are certain of the exact name
    OR o.name LIKE '%CreateAllThe%' -- if you are not so certain

また、重要なデータベース(たとえば、名前でストアドプロシージャを検索するためのクエリが必要なデータベース)で役立つスキーマ名も提供します。


1
レガシーアプリをSQL2005から2016に移行すると、スクリプトの「@errorMessage」の近くに「誤った構文」が表示されましたが、これはあまり役に立ちませんでした。SSSMで同じSQLを実行すると、「プロシージャ 'some_name'に」が追加されましたが、そのようなストアドプロシージャはどこにもありませんでした。それがトリガーであることが判明し、クエリでそれが見つかりました。ありがとう!
MickeyfAgain_BeforeExitOfSO 2017年

1

このクエリを使用できます:

SELECT 
    ROUTINE_CATALOG AS DatabaseName ,
    ROUTINE_SCHEMA AS SchemaName,
    SPECIFIC_NAME AS SPName ,
    ROUTINE_DEFINITION AS SPBody ,
    CREATED AS CreatedDate,
    LAST_ALTERED AS LastModificationDate
FROM INFORMATION_SCHEMA.ROUTINES
WHERE 
    (ROUTINE_DEFINITION LIKE '%%')
    AND 
    (ROUTINE_TYPE='PROCEDURE')
    AND
    (SPECIFIC_NAME LIKE '%AssessmentToolDegreeDel')

ご覧のとおり、ストアドプロシージャの本文内で検索を行うこともできます。


0

非常に巧妙なトリックSQLインジェクションを試してみると、検索ボックスのオブジェクトエクスプローラーでパーセンテージ文字を使用するだけで、すべてのストアドプロシージャ、関数、ビュー、テーブル、スキーマ、インデックスが検索されます...もっと考えるのにうんざりしていました:)

検索パターン


0

ストアドプロシージャ名があり、それがどのデータベースに属しているかわからない場合は、次を使用します-

Use [master]
GO

DECLARE @dbname VARCHAR(50)   
DECLARE @statement NVARCHAR(max)

DECLARE db_cursor CURSOR 
LOCAL FAST_FORWARD
FOR  
--Status 48 (mirrored db)
SELECT name FROM MASTER.dbo.sysdatabases WHERE STATUS NOT LIKE 48 AND name NOT IN ('master','model','msdb','tempdb','distribution')  

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @dbname  
WHILE @@FETCH_STATUS = 0  
BEGIN  

SELECT @statement = 'SELECT * FROM ['+@dbname+'].INFORMATION_SCHEMA.ROUTINES  WHERE [ROUTINE_NAME] LIKE ''%name_of_proc%'''+';'
print @statement

EXEC sp_executesql @statement

FETCH NEXT FROM db_cursor INTO @dbname  
END  
CLOSE db_cursor  
DEALLOCATE db_cursor

0

SQL Serverバージョン9.0(2005)の場合、以下のコードを使用できます。

select * 
from 
syscomments c
inner join sys.procedures p on p.object_id = c.id
where 
p.name like '%usp_ConnectionsCount%';

0

オプション1: SSMSで、View > Object Explorer DetailsF7に移動するかF7を押します。Searchボックスを使用してください。最後に、表示されたリストで右クリックして選択Synchronizeし、Object Explorerツリー内のオブジェクトを見つけます。

オブジェクトエクスプローラーの詳細

オプション2:のようなアドオンをインストールしますdbForge Search。表示されたリストを右クリックして、を選択しますFind in Object Explorer

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.