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

Transact-SQLを使用してストアドプロシージャの定義を取得する4つの方法

    この記事では、T-SQLを使用してSQLServerのストアドプロシージャの定義を取得する4つの方法を紹介します。

    定義は、ストアドプロシージャの作成に使用される実際のT-SQLステートメントです。

    ここでの3つのメソッドは、ビューの定義を返すために使用されるメソッドとまったく同じです(ただし、ここを除いて、ビューではなくストアドプロシージャで使用されています)。

    例1-sys.sql_modulesシステムカタログビュー

    sys.sql_modules システムカタログビューは、SQLServerのSQL言語定義モジュールである各オブジェクトの行を返します。

    つまり、このビューを使用して、関数、ビュー、そしてもちろんストアドプロシージャなど、さまざまなタイプのオブジェクトに関する情報を返すことができます。

    このビューで返される列の1つは、definitionと呼ばれます。 。名前が示すように、これはオブジェクトの定義を返します。

    SELECT definition
    FROM sys.sql_modules
    WHERE object_id = object_id('uspGetAlbumsByArtist');
    

    結果:

    +--------------+
    | definition   |
    |--------------|
    | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
    SELECT AlbumName
    FROM [dbo].[Albums]
    WHERE ArtistId = @ArtistId
                  |
    +--------------+
    

    この例ではコマンドラインインターフェイス(CLI)を使用したため、結果は適切にフォーマットされています。

    GUI(SSMSやAzure Data Studioなど)を使用して結果をグリッドで返す場合、定義は1つのセルの1つの長い行で返される可能性があります。このような場合、より読みやすい形式で表示したい場合は、追加の作業を行う必要があります。または、sp_helptextを使用することもできます 以下の方法。

    例2–sp_helptextシステムストアドプロシージャ

    ストアドプロシージャの定義を返す別の方法は、sp_helptextを使用することです。 システムストアドプロシージャ。 (暗号化されていない)ストアドプロシージャの定義を返すだけでなく、ユーザー定義のルール、デフォルト、ビュー、ユーザー定義のTransact-SQL関数、トリガー、計算列、CHECK 制約、またはシステムストアドプロシージャなどのシステムオブジェクト。

    このストアドプロシージャは、複数の行にまたがる定義を表示します。各行には、255文字のT-SQL定義が含まれています。

    例:

    EXEC sp_helptext 'uspGetAlbumsByArtist';
    

    GUI(Azure Data Studio)を使用したときに得られる結果は次のとおりです。

    コマンドラインインターフェイスを使用すると、次のようになります。

    +--------+
    | Text   |
    |--------|
    | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
            |
    | SELECT AlbumName
            |
    | FROM [dbo].[Albums]
            |
    | WHERE ArtistId = @ArtistId
            |
    +--------+
    

    例3– OBJECT_DEFINITION()関数

    ストアドプロシージャの定義を返す別の方法は、OBJECT_DEFINITION()を使用することです。 働き。以前のメソッドと同様に、このメソッドは他のオブジェクトタイプの定義を返すこともできます。

    この関数の使用例は次のとおりです。

    SELECT OBJECT_DEFINITION(
            OBJECT_ID('uspGetAlbumsByArtist')
        ) AS [Definition];
    

    結果:

    +--------------+
    | definition   |
    |--------------|
    | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
    SELECT AlbumName
    FROM [dbo].[Albums]
    WHERE ArtistId = @ArtistId
                  |
    +--------------+
    

    例4–ROUTINESシステム情報スキーマビュー

    ROUTINES システム情報スキーマビューは、ストアドプロシージャ(および関数も)の定義を返すこともできます。

    このビューは多くの列を返しますが、そのうちの1つはオブジェクトの定義です。したがって、その列に名前を付けて、定義だけを返すことができます。

    SELECT ROUTINE_DEFINITION
    FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';
    

    結果:

    +----------------------+
    | ROUTINE_DEFINITION   |
    |----------------------|
    | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
    SELECT AlbumName
    FROM [dbo].[Albums]
    WHERE ArtistId = @ArtistId
                          |
    +----------------------+
    

    ROUTINE_DEFINITIONに注意してください このシステムビューの列の最大長はnvarchar(4000) 。これより大きい定義の場合は、OBJECT_DEFINITION()を使用できます。 関数またはsys.sql_modules 前の例で表示します。どちらもnvarchar(max)を使用します 定義については、ROUTINE_DEFINITIONの文字制限はありません。 列(前述のとおり、 nvarchar(4000)


    1. MySQLテーブルが最後に更新されたのはいつですか?

    2. onUpgradeメソッドが呼び出されたことはありますか?

    3. MySQLにBLOBおよびCLOBファイルを挿入する方法は?

    4. SQLServer2005からMySQLにデータをエクスポートする方法