web-dev-qa-db-ja.com

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

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

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

70
gruber

次を使用できます。

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%'
119
Preet Sangha

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

alt text

41
Codesleuth

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

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

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

5
nathanchere

次のクエリを使用できます。

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')

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

1

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

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 ['[email protected]+'].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
Radagast_Brown

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

検索パターン

0
Ernest Gunning