Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

4 cách để có được định nghĩa của một chế độ xem bằng cách sử dụng Transact-SQL

Bài viết này trình bày 4 cách sử dụng T-SQL để lấy định nghĩa của một dạng xem trong SQL Server.

Định nghĩa dạng xem là câu lệnh T-SQL thực tế được sử dụng để tạo dạng xem.

Ví dụ 1 - Chế độ xem danh mục hệ thống sys.sql_modules

sys.sql_modules chế độ xem danh mục hệ thống trả về một hàng cho mỗi đối tượng là mô-đun do ngôn ngữ SQL xác định trong SQL Server.

Nói cách khác, bạn có thể sử dụng dạng xem này để trả về thông tin về các đối tượng thuộc nhiều loại khác nhau, bao gồm các hàm, các thủ tục được lưu trữ và tất nhiên, các dạng xem.

Một trong các cột được trả về với chế độ xem này được gọi là definition . Như tên của nó, nó trả về định nghĩa của đối tượng.

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

Kết quả:

+--------------+
| 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)

Tôi đã sử dụng giao diện dòng lệnh (CLI) với ví dụ này, vì vậy kết quả được định dạng độc đáo.

Nếu bạn sử dụng GUI (chẳng hạn như SSMS hoặc Azure Data Studio) để trả về kết quả dưới dạng lưới, định nghĩa có thể sẽ được trả về ở một dòng dài trong một ô. Trong những trường hợp như vậy, bạn sẽ cần phải thực hiện thêm một số công việc nếu bạn muốn nó hiển thị ở định dạng dễ đọc hơn. Ngoài ra, bạn có thể sử dụng sp_helptext phương pháp bên dưới.

Ví dụ 2 - Thủ tục lưu trữ hệ thống sp_helptext

Một phương pháp khác để trả về định nghĩa của một chế độ xem là sử dụng sp_helptext hệ thống lưu trữ thủ tục. Ngoài việc trả về định nghĩa cho một dạng xem, nó cũng có thể trả về định nghĩa của quy tắc do người dùng xác định, thủ tục được lưu trữ T-SQL mặc định, không được mã hóa, hàm Transact-SQL do người dùng xác định, trình kích hoạt, cột được tính, CHECK ràng buộc hoặc đối tượng hệ thống chẳng hạn như một thủ tục được lưu trữ trong hệ thống.

Như đã đề cập trong ví dụ trước, quy trình được lưu trữ này hiển thị định nghĩa của chế độ xem trên nhiều hàng. Mỗi hàng chứa 255 ký tự của định nghĩa T-SQL.

Ví dụ:

EXEC sp_helptext 'Website.Customers';

Đây là kết quả tôi nhận được khi sử dụng GUI (Azure Data Studio):

Và đây là những gì tôi nhận được khi sử dụng giao diện dòng lệnh của mình:

+--------+
| 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
        |
+--------+

Lần này, kết quả trông đẹp hơn khi sử dụng GUI.

Ví dụ 3 - Hàm OBJECT_DEFINITION ()

Một cách khác để trả về định nghĩa của một chế độ xem là sử dụng OBJECT_DEFINITION() hàm số. Cũng như các phương thức trước, phương thức này cũng có thể trả về định nghĩa của các kiểu đối tượng khác.

Dưới đây là một ví dụ về việc sử dụng chức năng này:

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

Kết quả:

+--------------+
| 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
              |
+--------------+

Lần này, trong CLI của tôi dễ đọc hơn lưới GUI của tôi.

Ví dụ 4 - Chế độ xem giản đồ thông tin hệ thống VIEWS

VIEWS chế độ xem giản đồ thông tin hệ thống cũng có thể trả về định nghĩa của chế độ xem. Một điểm khác biệt giữa phương pháp này và các phương pháp trước đó là VIEWS chế độ xem lược đồ thông tin chỉ giới hạn ở các chế độ xem (như tên của nó).

Nó trả về một loạt các cột, một trong số đó là định nghĩa của chế độ xem. Do đó, chúng ta có thể đặt tên cho cột đó để chỉ trả về định nghĩa:

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

Kết quả:

+-------------------+
| 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
                   |
+-------------------+

Lưu ý rằng VIEW_DEFINITION cột trong chế độ xem hệ thống này có độ dài tối đa là nvarchar (4000) . Đối với các định nghĩa chế độ xem lớn hơn mức này, bạn có thể sử dụng OBJECT_DEFINITION() trong ví dụ trước.

Giá trị trả về của OBJECT_DEFINITION() hàm là nvarchar (max) , vì vậy nó không có giới hạn ký tự của VIEW_DEFINITION (như đã đề cập, là nvarchar (4000) ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL, cách sử dụng SELECT

  2. Trình điều khiển Quickbooks ODBC

  3. Thiết kế cơ sở dữ liệu để ghi nhật ký kiểm tra

  4. Sử dụng bảng JavaFX để sắp xếp dữ liệu

  5. Ngôn ngữ thao tác dữ liệu SQL