Du kan skapa en annan tabell för att tillfälligt lagra resultaten från INSERTED
innan du anropar 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
EDIT: Tydligen kommer detta inte att fungera, eftersom tabellen tempInserted
är låst vid tidpunkten bcp
kallas.
Här är en lösningsidé, kanske inte den mest eleganta lösningen men borde fungera (om du inte är på expressutgåva). Du kan använda trigger bara för att lagra infogade data i den här tabellen och du kan skapa ett jobb som körs med jämna mellanrum (låt oss säga var 5:e minut) och läsa från den tabellen, kopiera till fil och ta bort.
Så triggern skulle bara vara:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
och lagrad procedur för att kopiera till fil - som du kan köra från jobbet:
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