この記事では、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) 。