- Trong bài viết dùng sys.objects, tôi đã khái quát cách lấy danh sách các Table, Store Procedure và nhiều đối tượng khác nhau trong Database.
- Đi xa hơn 1 chút, nếu tôi muốn lấy T-SQL chi tiết của mỗi Store Procedure, mỗi View, hay mỗi Trigger trong danh sách thì làm thế nào? Đây là kiến thức hết sức cần thiết mà một người quản trị Database cần phải biết.
- Xin giả định 1 tình huống thú vị: bạn có 1 Database với vài chục Table, và cả trăm câu Store Procedure, View, Function. Vì một lý do nào đó, bạn sửa tên một Column trong 1 Table. Làm thế nào bạn nhanh chóng tìm ra danh sách các Store Procedure, View, Function có dùng Column bạn vừa đổi tên trong câu SQL của mình và sửa lại cho đúng. Nếu click vào từng Store Procedure hay View xem có chứa Column đó không và sửa lại thì mất quá nhiều thời gian.
- Câu trả lời là dùng view sys.sql_modules.
- sys.sql_modules có nhiều thông tin, trong đó thông tin quan trọng nhất cho vấn đề của chúng ta là definition, chứa câu lệnh SQL của các đối tượng mà sys.sql_modules hỗ trợ, ví dụ như:
- P = SQL Stored Procedure
- V = View
- TR = SQL DML trigger
- FN = SQL
- Bài thực hành được thực hiện trên SQL Server 2008.
- Đoạn script sau trả về thông tin của các đối tượng mà sys.sql_modules hỗ trợ, kết hợp với sys.objects. Tôi dùng Database của tôi là 'SeaFood'.
Kết quả khi chạy trên Database của tôi, các Function, Store Procedure và đặc biệt là định nghĩa SQL bên trong (definition) được trả về. Còn nếu muốn tìm 1 giá trị nào đó bên trong các Store Procedure này như vấn đề mà tôi đặt ra ban đầu, thì bạn thêm mệnh đề where vào.

- Bạn có thể tham khảo thêm trên MSDN để biết thêm chi tiết.
Quang Vinh
mai.quangvinh@sqlvn.com
0 comments:
Post a Comment