आप सिस्टम तालिका में ट्रिगर नहीं जोड़ सकते हैं, लेकिन आप एक डीडीएल ट्रिगर बना सकते हैं जो ALTER PROC कथन पर सक्रिय होगा - उदाहरण:
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
मुझे यकीन नहीं है कि पिछली पैरामीटर सूची कैसे प्राप्त करें या यदि यह संभव भी है - क्या किसी को पता है?
यदि संभव हो तो नए मापदंडों को वैकल्पिक बनाने के लिए मैं चार्ल्स के सुझाव से सहमत हूं - मौजूदा कोड नहीं टूटेगा और आपको केवल संदर्भ खोजने होंगे यदि आपको जरूरी कॉल में पैरामीटर जोड़ें।
डेटाबेस को स्क्रिप्टिंग करना लंबा रास्ता लगता है। निम्नलिखित जैसी एक साधारण क्वेरी को आपकी खरीद (आपके डेटाबेस के भीतर) के सभी संदर्भ मिल जाने चाहिए:
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>%'
यह वही बात है, लेकिन SQL सर्वर के पिछले संस्करणों में भी काम करेगी:
SELECT so.name, so.type
FROM syscomments sc
JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'
आशा है कि यह मदद करता है,
एमडीडी