Tìm kiếm sự phụ thuộc vào MÀU SẮC CỤ THỂ (cách hiện đại, không sử dụng sysdepends)


13

Tôi cần tìm tất cả các khung nhìn & các thủ tục được lưu trữ tiêu thụ không chỉ một bảng nhất định, mà là một cột cụ thể trong một bảng.

"Dường như" hoạt động sau đây, nhưng có rất nhiều cảnh báo cần cẩn thận với phương pháp này (không đáng tin cậy vì nhiều lý do, sẽ sớm bị từ chối, v.v.):

SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName,
(SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type
FROM sysobjects so INNER JOIN syscolumns sc
ON so.id = sc.id
INNER JOIN sysdepends sd
ON so.id = sd.depid and sc.colid = sd.depnumber
WHERE 
    object_name(so.id) = 'MyTableName'
AND sc.name = 'MyColumnName'
order by object_name(so.id), Object_Type

Một số cách tiếp cận khác thường được tham chiếu là sys.sql_dependencies và sys.sql_expression_dependencies, nhưng cả hai cách này đều không có mức độ chi tiết của cột.

Có ai biết một cách làm điều này? (Hoặc ngay cả khi bạn biết chắc chắn rằng nó thực sự không thể được thực hiện, thì sẽ rất hữu ích khi biết.)


1
Ví dụ 2 của mẹo này là để tìm kiếm cấp cột.

Câu trả lời:


12

Dưới đây là một ví dụ AdventureWorks về xem phụ thuộc cột.

SELECT ReferencingObject = SCHEMA_NAME(o1.schema_id) + '.' + o1.name,
       ReferencedObject = SCHEMA_NAME(o2.schema_id) + '.'
                          + ed.referenced_entity_name,
       ColumnName = c.name,
       ReferencedObjectType = o2.type,
       ReferencingObjecType = o1.type
FROM   AdventureWorks2012.sys.sql_expression_dependencies ed
       INNER JOIN AdventureWorks2012.sys.objects o1
               ON ed.referencing_id = o1.object_id
       INNER JOIN AdventureWorks2012.sys.objects o2
               ON ed.referenced_id = o2.object_id
       INNER JOIN AdventureWorks2012.sys.sql_dependencies d
               ON ed.referencing_id = d.object_id
                  AND d.referenced_major_id = ed.referenced_id
       INNER JOIN sys.columns c
               ON c.object_id = ed.referenced_id
                  AND d.referenced_minor_id = c.column_id
WHERE  SCHEMA_NAME(o1.schema_id) + '.' + o1.name = 'HumanResources.vEmployee' AND c.name = 'JobTitle'
ORDER  BY ReferencedObject,
          c.column_id; 

Điều này có vẻ xuất sắc. Bạn có thể nhận xét về việc điều này TẠI TẤT CẢ hay POSSIBLY bị các vấn đề "cũ, lỗi thời" như sysdepends không? Xem: sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/...
tbone

CSONG: Bất kỳ ý tưởng nếu điều này sẽ giải quyết phụ thuộc lồng nhau? tức là: một SẢN PHẨM phụ thuộc vào XEM, phụ thuộc vào TABLE.COLUMN: nếu chúng ta đặt tiêu chí cho BẢNG & MÀU SẮC, cả chế độ xem Proc sẽ hiển thị trong kết quả?
xương sống

Tôi chỉ không hiểu mục đích được phục vụ theo wheređiều kiện. TS muốn tìm phụ thuộc vào cột cụ thể. Tôi nghĩ rằng điều kiện nên hạn chế c.nameed.referenced_id/ ed.referenced_entity_name, không nên?
pkuderov

Ở đây vào năm 2019 - sys.sql_dependencieshiện đang ở chế độ bảo trì và nhóm Microsoft chỉ khuyến nghị sử dụng sys.sql_expression_dependencies. Điều đó đang được nói - nó không giống như sys.sql_expression_dependenciesnắm bắt cùng một mức độ chi tiết.
10762409 nói Phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.