आप INSERTED
. से परिणामों को अस्थायी रूप से संग्रहीत करने के लिए एक और तालिका बना सकते हैं कॉल करने से पहले bcp
.
create trigger monitorTrigger on test
AFTER insert
as
declare @sql varchar(8000)
--delete it every time
TRUNCATE TABLE test2.dbo.tempInserted
--populate it from inserted
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
--use it in bcp
SELECT @sql = 'bcp "select * from test2.dbo.tempInserted" queryout I:\File\mytest.txt -c -t -T -S YAMUNA\SQLEXPRESS'
exec xp_cmdshell @sql
संपादित करें: जाहिरा तौर पर यह काम नहीं करेगा, क्योंकि तालिका tempInserted
समय पर लॉक है bcp
कहा जाता है।
यहां एक वर्कअराउंड विचार है, शायद सबसे सुंदर समाधान नहीं है, लेकिन काम करना चाहिए (यदि आप एक्सप्रेस संस्करण पर नहीं हैं)। आप इस तालिका में सम्मिलित डेटा को संग्रहीत करने के लिए ट्रिगर का उपयोग कर सकते हैं और आप एक नौकरी बना सकते हैं जो समय-समय पर चलती है (हर 5 मिनट में कहें) और उस तालिका से पढ़ें, फ़ाइल में कॉपी करें और हटाएं।
तो ट्रिगर बस होगा:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
और फ़ाइल में कॉपी करने की संग्रहीत प्रक्रिया - जिसे आप नौकरी से चला सकते हैं:
CREATE PROC transferToFile
AS
BEGIN
declare @sql varchar(8000)
SELECT @sql = 'bcp "select * from test2.dbo.tempInserted" queryout I:\File\mytest.txt -c -t -T -S YAMUNA\SQLEXPRESS'
exec xp_cmdshell @sql
--delete at the end
TRUNCATE TABLE test2.dbo.tempInserted
END