2009-03-26 24 views
5

Im làm việc trên DB lớn này có rất nhiều kiến ​​thức kinh doanh được nhúng trong các SP [Tôi biết!] Và có rất nhiều chuỗi giữa các SP. tức là một proc được lưu trữ gọi một số khác.Làm thế nào để tìm danh sách các thủ tục lưu trữ ảnh hưởng đến một cột cụ thể?

Im muốn tìm ra danh sách các thủ tục được lưu trữ cập nhật một cột cụ thể. Làm thế nào tôi sẽ làm điều đó.

Sử dụng planplan_All như được nêu trong SQL Table and column Parser for stored procedures không hoạt động đối với tôi, bởi vì đây là shared dev db.

sử dụng chữ Sp từ văn bản hệ thống quét db chính như được mô tả là không khả thi vì tôi không có quyền truy cập vào db chính.

Vậy làm cách nào tôi có thể tìm thấy thông tin này?

+0

có thể trùng lặp của [Tìm tất cả các thủ tục được lưu trữ mà tham khảo một cột cụ thể trong một số bảng] (https://stackoverflow.com/questions/19539696/find-all-stored-procedures-that-reference -a-cụ thể-cột-trong-một-bảng) – Matt

Trả lời

9

Các bạn đã thử này: EXEC sp_depends @objname = [table name of the column you are interested in].

Ví dụ: nếu bạn có cột có tên Price trong bảng có tên Product, bạn sẽ thực hiện điều này: EXEC sp_depends @objname = N'Product'.

Chỉ cần thực hiện điều này sẽ cung cấp cho bạn danh sách tất cả các sp, lượt xem, v.v. phụ thuộc vào bảng cụ thể đó.

tôi sử dụng tất cả thời gian khi tôi làm việc với một db trong đó có hơn 400 bảng :-)

sp_depends page on MSDN

8

Hãy thử một cái gì đó như thế này:

use YourDatabase; 

select [Name]  
from sys.procedures 
where object_definition([object_id]) like '%YourColumnName%'; 

Rõ ràng này có tiềm năng để tạo ra rất nhiều dương tính giả tùy thuộc vào những gì các cột được đặt tên nhưng ít nhất bạn sẽ có một danh sách các thủ tục để sàng lọc thông qua.

1

Đây là công cụ hoạt động trong SQL 2000+; Lưu ý rằng như Andrew đã nêu trong của mình, bạn sẽ nhận được dương tính giả tùy thuộc vào tên cột của bạn, nhưng đó là một nơi bắt đầu:

SELECT DISTINCT o.Name 
FROM syscomments c 
    JOIN sysobjects o ON c.ID = o.ID 
WHERE c.Text LIKE '%ColumnName%' 
ORDER BY o.Name 
10

Từ quan điểm hệ thống sys.sql_dependencies bạn có thể nhận được phụ thuộc vào mức độ cột.

DECLARE @Schema SYSNAME 
DECLARE @Table SYSNAME 
DECLARE @Column SYSNAME 

SET @Schema = 'dbo' 
SET @Table = 'TableName' 
SET @Column = 'ColumnName' 

SELECT o.name 
FROM sys.sql_dependencies AS d 
    INNER JOIN sys.all_objects AS o ON o.object_id = d.object_id 
    INNER JOIN sys.all_objects AS ro ON ro.object_id = d.referenced_major_id 
    INNER JOIN sys.all_columns AS c ON c.object_id = ro.object_id AND c.column_id = d.referenced_minor_id 
WHERE (SCHEMA_NAME(ro.schema_id)[email protected]) 
    and o.type_desc = 'SQL_STORED_PROCEDURE' 
    and ro.name = @Table 
    and c.name = @Column 
GROUP BY o.name 
0
use msdb 
go 
select * from sysjobs j 
inner join sysjobsteps s 
on j.job_id=s.job_id 
where command like '%HBR_INSTRUMENT%' 
Các vấn đề liên quan