Puoi creare un'altra tabella per la memorizzazione temporanea dei risultati da INSERTED
prima di chiamare 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
MODIFICA: Apparentemente questo non funzionerà, perché la tabella tempInserted
è bloccato al momento bcp
viene chiamato.
Ecco un'idea di soluzione alternativa, forse non la soluzione più elegante ma dovrebbe funzionare (se non sei in edizione express). Puoi usare trigger solo per memorizzare i dati inseriti in questa tabella e puoi creare un lavoro che viene eseguito periodicamente (diciamo ogni 5 minuti) e leggere da quella tabella, copiare su file ed eliminare.
Quindi il trigger sarebbe solo:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
e Stored Procedure da copiare su file - che puoi eseguire dal lavoro:
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