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

Transact-SQLを使用してビューの定義を取得する4つの方法

    この記事では、T-SQLを使用してSQLServerのビューの定義を取得する4つの方法を紹介します。

    ビュー定義は、ビューの作成に使用される実際のT-SQLステートメントです。

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

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

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

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

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

    結果:

    +--------------+
    | definition   |
    |--------------|
    | 
    CREATE VIEW Website.Customers
    AS
    SELECT s.CustomerID,
           s.CustomerName,
           sc.CustomerCategoryName,
           pp.FullName AS PrimaryContact,
           ap.FullName AS AlternateContact,
           s.PhoneNumber,
           s.FaxNumber,
           bg.BuyingGroupName,
           s.WebsiteURL,
           dm.DeliveryMethodName AS DeliveryMethod,
           c.CityName AS CityName,
           s.DeliveryLocation AS DeliveryLocation,
           s.DeliveryRun,
           s.RunPosition
    FROM Sales.Customers AS s
    LEFT OUTER JOIN Sales.CustomerCategories AS sc
    ON s.CustomerCategoryID = sc.CustomerCategoryID
    LEFT OUTER JOIN [Application].People AS pp
    ON s.PrimaryContactPersonID = pp.PersonID
    LEFT OUTER JOIN [Application].People AS ap
    ON s.AlternateContactPersonID = ap.PersonID
    LEFT OUTER JOIN Sales.BuyingGroups AS bg
    ON s.BuyingGroupID = bg.BuyingGroupID
    LEFT OUTER JOIN [Application].DeliveryMethods AS dm
    ON s.DeliveryMethodID = dm.DeliveryMethodID
    LEFT OUTER JOIN [Application].Cities AS c
    ON s.DeliveryCityID = c.CityID
                  |
    +--------------+
    (1 row affected)
    

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

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

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

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

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

    例:

    EXEC sp_helptext 'Website.Customers';
    

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

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

    +--------+
    | Text   |
    |--------|
    | 
            |
    | CREATE VIEW Website.Customers
            |
    | AS
            |
    | SELECT s.CustomerID,
            |
    |        s.CustomerName,
            |
    |        sc.CustomerCategoryName,
            |
    |        pp.FullName AS PrimaryContact,
            |
    |        ap.FullName AS AlternateContact,
            |
    |        s.PhoneNumber,
            |
    |        s.FaxNumber,
            |
    |        bg.BuyingGroupName,
            |
    |        s.WebsiteURL,
            |
    |        dm.DeliveryMethodName AS DeliveryMethod,
            |
    |        c.CityName AS CityName,
            |
    |        s.DeliveryLocation AS DeliveryLocation,
            |
    |        s.DeliveryRun,
            |
    |        s.RunPosition
            |
    | FROM Sales.Customers AS s
            |
    | LEFT OUTER JOIN Sales.CustomerCategories AS sc
            |
    | ON s.CustomerCategoryID = sc.CustomerCategoryID
            |
    | LEFT OUTER JOIN [Application].People AS pp
            |
    | ON s.PrimaryContactPersonID = pp.PersonID
            |
    | LEFT OUTER JOIN [Application].People AS ap
            |
    | ON s.AlternateContactPersonID = ap.PersonID
            |
    | LEFT OUTER JOIN Sales.BuyingGroups AS bg
            |
    | ON s.BuyingGroupID = bg.BuyingGroupID
            |
    | LEFT OUTER JOIN [Application].DeliveryMethods AS dm
            |
    | ON s.DeliveryMethodID = dm.DeliveryMethodID
            |
    | LEFT OUTER JOIN [Application].Cities AS c
            |
    | ON s.DeliveryCityID = c.CityID
            |
    +--------+
    

    今回は、GUIを使用すると結果が良くなります。

    例3– OBJECT_DEFINITION()関数

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

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

    SELECT OBJECT_DEFINITION(
            OBJECT_ID('Website.Customers')
        ) AS [Definition];
    

    結果:

    +--------------+
    | Definition   |
    |--------------|
    | 
    CREATE VIEW Website.Customers
    AS
    SELECT s.CustomerID,
           s.CustomerName,
           sc.CustomerCategoryName,
           pp.FullName AS PrimaryContact,
           ap.FullName AS AlternateContact,
           s.PhoneNumber,
           s.FaxNumber,
           bg.BuyingGroupName,
           s.WebsiteURL,
           dm.DeliveryMethodName AS DeliveryMethod,
           c.CityName AS CityName,
           s.DeliveryLocation AS DeliveryLocation,
           s.DeliveryRun,
           s.RunPosition
    FROM Sales.Customers AS s
    LEFT OUTER JOIN Sales.CustomerCategories AS sc
    ON s.CustomerCategoryID = sc.CustomerCategoryID
    LEFT OUTER JOIN [Application].People AS pp
    ON s.PrimaryContactPersonID = pp.PersonID
    LEFT OUTER JOIN [Application].People AS ap
    ON s.AlternateContactPersonID = ap.PersonID
    LEFT OUTER JOIN Sales.BuyingGroups AS bg
    ON s.BuyingGroupID = bg.BuyingGroupID
    LEFT OUTER JOIN [Application].DeliveryMethods AS dm
    ON s.DeliveryMethodID = dm.DeliveryMethodID
    LEFT OUTER JOIN [Application].Cities AS c
    ON s.DeliveryCityID = c.CityID
                  |
    +--------------+
    

    今回は、GUIグリッドよりもCLIで読みやすくなっています。

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

    VIEWS システム情報スキーマビューは、ビューの定義を返すこともできます。この方法と以前の方法の違いの1つは、 VIEWS 情報スキーマビューは、ビューのみに制限されています(名前が示すとおり)。

    一連の列を返します。そのうちの1つはビューの定義です。したがって、その列に名前を付けて、定義だけを返すことができます。

    SELECT VIEW_DEFINITION
    FROM INFORMATION_SCHEMA.VIEWS
    WHERE TABLE_NAME = 'Customers';
    

    結果:

    +-------------------+
    | VIEW_DEFINITION   |
    |-------------------|
    | 
    CREATE VIEW Website.Customers
    AS
    SELECT s.CustomerID,
           s.CustomerName,
           sc.CustomerCategoryName,
           pp.FullName AS PrimaryContact,
           ap.FullName AS AlternateContact,
           s.PhoneNumber,
           s.FaxNumber,
           bg.BuyingGroupName,
           s.WebsiteURL,
           dm.DeliveryMethodName AS DeliveryMethod,
           c.CityName AS CityName,
           s.DeliveryLocation AS DeliveryLocation,
           s.DeliveryRun,
           s.RunPosition
    FROM Sales.Customers AS s
    LEFT OUTER JOIN Sales.CustomerCategories AS sc
    ON s.CustomerCategoryID = sc.CustomerCategoryID
    LEFT OUTER JOIN [Application].People AS pp
    ON s.PrimaryContactPersonID = pp.PersonID
    LEFT OUTER JOIN [Application].People AS ap
    ON s.AlternateContactPersonID = ap.PersonID
    LEFT OUTER JOIN Sales.BuyingGroups AS bg
    ON s.BuyingGroupID = bg.BuyingGroupID
    LEFT OUTER JOIN [Application].DeliveryMethods AS dm
    ON s.DeliveryMethodID = dm.DeliveryMethodID
    LEFT OUTER JOIN [Application].Cities AS c
    ON s.DeliveryCityID = c.CityID
                       |
    +-------------------+
    

    VIEW_DEFINITIONに注意してください このシステムビューの列の最大長はnvarchar(4000) 。これより大きいビュー定義の場合は、 OBJECT_DEFINITION()を使用できます。 前の例の関数。

    OBJECT_DEFINITION()の戻り値 関数はnvarchar(max)です 、したがって、 VIEW_DEFINITIONの文字制限はありません 列(前述のとおり、 nvarchar(4000)


    1. MySqlビューのパフォーマンス

    2. DBAが担当する9つの重要なタスク

    3. CSVデータをPostgreSQLデータベース(リモートデータベース)に挿入する方法

    4. node-postgresを使用して複数の行をPGに適切に挿入するにはどうすればよいですか?