web-dev-qa-db-ja.com

ストアド関数を表示する方法-SQL Server

バージョン:SQLServer 8

Sqlserverのストアド関数の内容、つまり関数が正確に何をしているかを表示したいと思います。

リストされているオプションはありません here sys.objectsと呼ばれるデータベース/テーブルは存在しないようです。 information_table.routinesテーブルをクエリできましたが、探している関数は含まれていません。私の機能は次の場所にあります。

DBName.dbo.functionName

この関数の内容を表示するにはどうすればよいですか?

17
etech

sp_helptext コマンドを使用して、定義を表示できます。それは単に

ユーザー定義ルール、デフォルト、暗号化されていないTransact-SQLストアドプロシージャ、ユーザー定義Transact-SQL関数、トリガー、計算列、CHECK制約、ビュー、またはシステムストアドプロシージャなどのシステムオブジェクトの定義を表示します。

例えば;

EXEC sp_helptext 'StoredProcedureName'

EDIT:databasesまたはserverが異なる場合は、それらを指定することでもできます。

EXEC [ServerName].[DatabaseName].dbo.sp_helptext 'storedProcedureName'
24
Sachin
select definition 
from sys.sql_modules 
where object_name(object_id) like 'functionName'
5
Pritesh
--ShowStoredProcedures
select p.[type]
      ,p.[name]
      ,c.[definition]
  from sys.objects p
  join sys.sql_modules c
    on p.object_id = c.object_id
 where p.[type] = 'P'
   --and c.[definition] like '%foo%'
ORDER BY p.[name]
___________

SELECT OBJECT_NAME(object_id) ProcedureName,
       definition
FROM sys.sql_modules
WHERE objectproperty(object_id,'IsProcedure') = 1
ORDER BY OBJECT_NAME(object_id)
2

むしろINFORMATION_SCHEMA.ROUTINESを使用します。

select ROUTINE_NAME, ROUTINE_DEFINITION, LAST_ALTERED 
from INFORMATION_SCHEMA.ROUTINES where SPECIFIC_NAME = 'usp_mysp'

ROUTINE_DEFINITION列を新しいウィンドウにコピーするだけで、コンテンツ全体が表示されます。

1
Hiram

ストアドプロシージャであるかどうかOR Function ORスクリプトの下の任意のSQLオブジェクトは完全な定義を提供します

USE<Your Data base>
SELECT OBJECT_DEFINITION (OBJECT_ID('<YOUR OBJECT NAME>')) AS ObjectDefinition 

OBJECT NAMEは、ストアドプロシージャ/関数/トリガーなどのオブジェクト名です... etc name

0
Rinoy Ashokan

はい、正常に動作しています。

ストアドプロシージャを表示するには... SELECT * FROM sys.procedures;

procduere名を取得し、同じものに対して以下のクエリを使用します(SQuirreL SQL Clientバージョン3.2.0-RC1を使用しています)。

EXEC sp_helptext 'StoredProcedureName'。

0
Harshavardhan