Du kan oprette en anden tabel til midlertidig lagring af resultaterne fra INSERTED
før du kalder 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: Dette vil tilsyneladende ikke virke, fordi tabel tempInserted
er låst på tidspunktet bcp
kaldes.
Her er en løsningsidé, måske ikke den mest elegante løsning, men burde virke (hvis du ikke er på ekspresudgave). Du kan bruge trigger blot til at gemme de indsatte data i denne tabel, og du kan oprette et job, der kører periodisk (f.eks. hvert 5. minut) og læse fra den tabel, kopiere til fil og slette.
Så udløseren ville bare være:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
og Lagret procedure for at kopiere til fil - som du kan køre fra 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