web-dev-qa-db-ja.com

ストアドプロシージャのクエリテキストはテーブルに保存されていますか?

Sysスキーマオブジェクトには、プランハンドルを必要とするDM_EXEC_SQL_TEXT関数以外は何も表示されませんが、クエリテキストを取得しようとしているプロシージャが現在実行されていません。 (たぶん、キャッシュされたプランに方法があるのでしょうか?...私が探しているものにはキャッシュされたプランがないかもしれませんが。)

ストアドプロシージャのクエリテキストは、クエリ可能な場所に保存されていますか?

Sp_helptextはオプションである可能性があります: https://docs.Microsoft.com/en-us/sql/relational-databases/stored-procedures/view-the-definition-of-a-stored-procedure? view = sql-server-ver15#TsqlProcedure

2
J.D.

これを取得するには、さまざまな入力情報を必要とするいくつかの方法があります

INFORMATION_SCHEMA

定義が必要なオブジェクトの名前を知っていれば十分です。

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'MyProcName'

このスキーマはデータベース固有であるため、このクエリが正しいデータを返すには、プロシージャが存在するデータベースのコンテキストにいる必要があります。また、プロシージャの最初の4000文字のみを返すことにも注意してください。

OBJECT_DEFINITION

探しているプロシージャのobject_idを知っている必要があります。

SELECT OBJECT_DEFINITION(*object_id*)

データベース固有ですが、オブジェクトの完全なテキストを返します。

sys.sql_modules

探しているプロシージャのobject_idを知っている必要があります。

SELECT * FROM sys.sql_modules WHERE object_id = *object_id*

データベース固有ですが、オブジェクトの完全なテキストを返します。

4
HandyD