Tôi đã tạo một bảng trên môi trường phát triển cho mục đích thử nghiệm và có vài sp đang refreing bảng này. Bây giờ tôi phải bỏ bảng này cũng như xác định tất cả các sp đang tham chiếu đến bảng này. Tôi đang gặp khó khăn để tìm danh sách của tất cả các sp's. Xin gợi ý một số truy vấn bằng cách giả sử rằng tên bảng là 'x' và cơ sở dữ liệu là SQL Server 2005.Làm thế nào để xác định tất cả các thủ tục lưu trữ tham chiếu đến một bảng cụ thể
Trả lời
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
BTW - đây là một nguồn tài nguyên có ích cho loại câu hỏi: http://msdn.microsoft.com/en-us/library/ms345522%28v=SQL.90%29.aspx
Có bất kỳ lý do để làm điều này qua truy cập vào 'ROUTINE_DEFINITION 'on' INFORMATION_SCHEMA.ROUTINES'? – Marie
@Marie - SQL-Server 2005 (AFAIK) không có. – Chains
Câu hỏi, giải pháp này có tìm thấy các đối tượng được tham chiếu khi chúng được tham chiếu * bên trong * của một chuỗi không? như, 'set @Query =" SELECT * FROM Object_I_Need_To_Find_References ... "; ' –
SELECT
o.name
FROM
sys.sql_modules sm
INNER JOIN sys.objects o ON
o.object_id = sm.object_id
WHERE
sm.definition LIKE '%<table name>%'
Chỉ cần ghi nhớ rằng điều này cũng sẽ bật lên SPs nơi tên bảng là trong các ý kiến hoặc trong trường hợp tên bảng là một chuỗi con của tên bảng khác đang được sử dụng. Ví dụ: nếu bạn có các bảng có tên là "test" và "test_2" và bạn cố gắng tìm kiếm SP bằng "test" thì bạn sẽ nhận được kết quả cho cả hai.
Truy vấn 'syscomments' theo cách này không đáng tin cậy đối với các quy trình dài vì nó chia tách định nghĩa thành 4000 khối ký tự trên nhiều hàng. 'sys.sql_modules' tránh điều này. –
Điểm tốt. Tôi đã cập nhật nó để sử dụng 'sys.sql_modules' thay thế. –
syscomments đã được debunked trong mỗi một tá của tôi hoặc như vậy câu trả lời cho cùng một câu hỏi http://stackoverflow.com/search?tab=votes&q=user%3a27535%20syscomments – gbn
Một cách không truy vấn sẽ được sử dụng SQL Server Management Studio.
Định vị bảng, nhấp chuột phải và chọn "Xem phụ thuộc".
EDIT
Nhưng, như các bình luận nói, nó không phải là rất đáng tin cậy.
Năm 2005 thông tin phụ thuộc không đáng tin cậy nếu các đối tượng không được tạo theo thứ tự đúng. –
Khi @Martin Smith lưu ý, một thủ tục được lưu trữ tham chiếu đến một đối tượng không tồn tại sẽ được tạo ra, mặc dù có cảnh báo, nhưng không phải mục nhập sẽ được đặt trong sysdepends. Ngoài ra, điều tương tự cũng đúng đối với các thủ tục được lưu trữ tham chiếu đến một bảng trong cơ sở dữ liệu nước ngoài: Không có mục nhập nào được đặt trong các sysdepends trong một trong hai cơ sở dữ liệu. Tính năng Antoher là việc thả/tạo lại một bảng hoặc khung nhìn sẽ phá vỡ chuỗi phụ thuộc. Những tính năng ... err ... làm cho sự phụ thuộc của SQL Server theo dõi khá nhiều vô dụng. –
Các công trình sau đây trên SQL2008 trở lên. Cung cấp danh sách các thủ tục và chức năng được lưu trữ.
select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
from sys.objects o inner join sys.sql_expression_dependencies sd on o.object_id = sd.referenced_id
inner join sys.objects sp on sd.referencing_id = sp.object_id
and sp.type in ('P', 'FN')
where o.name = 'YourTableName'
order by sp.Name
OP cần câu trả lời cho SQL-Server-2005 – Chains
Các truy vấn sau đây sẽ lấy tất cả các tên Stored Procedure và định nghĩa tương ứng của những người của SP
select
so.name,
text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and UPPER(text) like '%<TABLE NAME>%'
đôi khi trên các truy vấn sẽ không cho kết quả chính xác, có được xây dựng trong thủ tục lưu trữ có sẵn để có được bàn phụ thuộc như:
EXEC sp_depends @objname = N'TableName';
Không hoạt động với Sql Azure –
Đối với tôi, điều này cho thấy trình kích hoạt và chế độ xem nhưng không được lưu trữ procs. – NealWalters
LƯU Ý: Tôi chạy trên hệ thống mà tôi có quyền truy cập vào các bảng, nhưng không phải Procs được lưu trữ, do đó, tất nhiên các Procs được lưu trữ không hiển thị trong kết quả. – NealWalters
dưới đây truy vấn là công việc chỉ dành cho bảng không cho cột
EXEC sp_depends @objname = N'TableName';
dưới đây truy vấn là tốt nhất nó không bỏ lỡ bất cứ điều gì nó mang lại cho phụ trợ nhưng không sai
select distinct
so.name
--, text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and lower(text) like '%organizationtypeid%'
order by so.name
Đối với tôi, không trả lại bất cứ điều gì trên SSMS 2014 chạy với cơ sở dữ liệu trên SQL Server 12.0) – NealWalters
SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
object_definition(OBJECT_ID)
FROM sys.Procedures
WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'
GO
này sẽ làm việc nếu bạn có đề cập đến tên bảng.
- 1. Các thủ tục lưu trữ Mysql Kiểu cột Tham chiếu
- 2. Làm thế nào để lưu một thủ tục lưu trữ?
- 3. Làm thế nào để thay đổi tên schema của một bảng trong tất cả các thủ tục lưu trữ
- 4. Làm thế nào để gọi Thủ tục lưu trữ (với 2 tham số) trong một thủ tục lưu trữ?
- 5. 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ể?
- 6. Làm thế nào để gọi thủ tục lưu sẵn từ một thủ tục lưu sẵn khác?
- 7. Cách đơn giản để lập trình có được tất cả các thủ tục được lưu trữ
- 8. MySQL: Làm cách nào để tìm hiểu bảng nào tham chiếu đến một bảng cụ thể?
- 9. Làm thế nào để kiểm tra tất cả các thủ tục lưu trữ là ok trong máy chủ sql?
- 10. Làm thế nào để trả lại một bảng từ một thủ tục lưu trữ?
- 11. VisualVM - Tìm tất cả các tham chiếu đến một lớp
- 12. SQL Server - Làm thế nào để khóa một bảng cho đến khi một thủ tục lưu trữ kết thúc
- 13. Danh sách các thủ tục được lưu trữ từ Bảng
- 14. Làm thế nào để sử dụng đầu ra Bảng từ lưu trữ MYSQL Thủ tục
- 15. Tìm tất cả các tham chiếu đến một cột trong SQL Server 2008
- 16. Tìm tất cả các cuộc gọi Thủ tục lưu trữ MySQL?
- 17. Làm cách nào để gọi thủ tục được lưu trữ với các tham số độc đáo?
- 18. MySQL: Làm thế nào để sửa đổi các thủ tục lưu trữ một cách nguyên tử?
- 19. Sharepoint: làm thế nào tôi có thể tìm thấy tất cả các trang lưu trữ một phần web cụ thể?
- 20. Thả tất cả các thủ tục được lưu trữ trong MySQL hoặc sử dụng các thủ tục được lưu trữ tạm thời
- 21. Làm thế nào để sử dụng một giá trị từ một thủ tục lưu sẵn trong một thủ tục khác?
- 22. Mẫu lưu trữ với các thủ tục được lưu trữ
- 23. Thủ tục lưu trữ Firebird để ghép tất cả các giá trị trường từ nhiều hàng
- 24. Gọi thủ tục lưu trữ từ một thủ tục lưu trữ SQL Server
- 25. C#/SQL Lấy tất cả các thủ tục được lưu trữ và mã số của chúng
- 26. Công cụ để thay đổi tên đơn vị và tất cả các tham chiếu đến nó
- 27. Làm cách nào để tìm tất cả các thủ tục được lưu trữ chèn, cập nhật hoặc xóa bản ghi?
- 28. Làm cách nào để tải xuống tất cả các thủ tục được lưu trữ từ một cơ sở dữ liệu cụ thể
- 29. Làm thế nào để bạn có thể lập trình xác định số tham chiếu đến một phương thức với C#
- 30. Các thủ tục được lưu trữ kỹ thuật đảo ngược
bản sao có thể có của [SQL Server 2005 - Tìm Procs đã lưu trữ nào chạy đến bảng cụ thể] (http://stackoverflow.com/questions/3361141/sql-server-2005-find-which-stored-procs-run- to-a-specific-table) –
có thể trùng lặp của [làm thế nào để tìm kiếm thủ tục lưu trữ Sql Server 2008 R2 cho một chuỗi?] (http://stackoverflow.com/questions/6354256/how-to-search-sql-server- 2008-r2-được lưu trữ-thủ tục-cho-một-chuỗi) hoặc http://stackoverflow.com/questions/3991030/searching-in-sql-management-studio-2005/3991077#3991077 – gbn
cho các chuyên gia: làm thế nào về một máy chủ không phải MS SQL? – Deian