Bạn không thể thêm trình kích hoạt vào bảng hệ thống, nhưng bạn có thể tạo trình kích hoạt DDL sẽ kích hoạt trên câu lệnh ALTER PROC - ví dụ:
ALTER TRIGGER DDL_PROC
ON DATABASE
FOR ALTER_PROCEDURE
AS
DECLARE @data XML, @ObjectName sysname, @ParamCount int
SET @data = EVENTDATA()
SET @ObjectName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')
PRINT 'You have changed procedure: ' + @ObjectName
SELECT @ParamCount = COUNT(*) FROM sys.parameters
WHERE object_id = OBJECT_ID(@ObjectName)
RAISERROR('This procedure now has %i parameter(s)',0,0,@ParamCount)
GO
Tôi không chắc làm thế nào để lấy danh sách tham số trước đó hoặc nếu nó có thể - có ai biết không?
Tôi sẽ đồng ý với đề xuất của Charles để đặt các tham số mới là tùy chọn nếu có thể - mã hiện tại sẽ không bị hỏng và bạn chỉ phải tìm các tham chiếu nếu bạn phải thêm tham số vào cuộc gọi.
Viết kịch bản cho cơ sở dữ liệu có vẻ như là một chặng đường dài. Một truy vấn đơn giản như sau sẽ tìm thấy tất cả các tham chiếu đến proc của bạn (trong cơ sở dữ liệu của bạn):
SELECT so.name, so.type_desc
FROM sys.all_objects so
JOIN sys.all_sql_modules sm ON so.[object_id] = sm.[object_id]
WHERE sm.[definition] LIKE '%<proc name>%'
Đây là điều tương tự, nhưng cũng sẽ hoạt động trong các phiên bản trước của máy chủ SQL:
SELECT so.name, so.type
FROM syscomments sc
JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'
Hy vọng điều này sẽ hữu ích,
MDD