सम्मिलित ट्रिगर को एक बार बल्क इंसर्ट के लिए कॉल किया जाता है, लेकिन ट्रिगर पर आप विशेष inserted
का उपयोग कर सकते हैं सभी सम्मिलित पंक्तियों को प्राप्त करने के लिए तालिका।
तो, कल्पना कीजिए कि आपके पास इस तरह एक सम्मिलित ट्रिगर है, जो table
. में डाली गई सभी पंक्तियों को लॉग करता है
create trigger trgInsertTable
on dbo.table
for insert
as
insert tableLog(name)
select name from inserted
इस ट्रिगर के साथ, जब आप table
. पर बल्क इंसर्ट करते हैं , tableLog
table
. में डाली गई पंक्तियों की समान संख्या से भरा है
आपके लिए विशिष्ट ट्रिगर, चूंकि आपको प्रत्येक पंक्ति के लिए एक संग्रहीत कार्यविधि को कॉल करने की आवश्यकता है, आपको एक कर्सर का उपयोग करने की आवश्यकता है:
ALTER TRIGGER dbo.Notify
ON dbo.Table
AFTER INSERT
AS
BEGIN
DECLARE @EmailSender varchar(50)='Sender Profile'
DECLARE @User varchar(20)
DECLARE @Subject varchar(50)
DECLARE cursor CURSOR FOR
SELECT User, '(' + CONVERT(varchar, Id) + ')!'
FROM inserted
OPEN cursor
FETCH NEXT FROM cursor INTO @User, @Subject
WHILE @@FETCH_STATUS = 0
BEGIN
exec msdb.dbo.sp_send_dbmail
@[email protected],
@[email protected]
@[email protected],
@body='//etc'
FETCH NEXT FROM cursor INTO @User, @Subject
END
CLOSE cursor
DEALLOCATE cursor
END
मैंने परीक्षण नहीं किया, लेकिन काम करना चाहिए