Você pode criar outra tabela para armazenar temporariamente os resultados de
INSERTED
antes de chamar 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
EDITAR: Aparentemente, isso não funcionará, porque a tabela
tempInserted
está bloqueado no momento bcp
é chamado. Aqui está uma ideia de solução alternativa, talvez não seja a solução mais elegante, mas deve funcionar (se você não estiver na edição expressa). Você pode usar o gatilho apenas para armazenar os dados inseridos nesta tabela e pode criar um trabalho que é executado periodicamente (a cada 5 minutos, digamos) e ler a partir dessa tabela, copiar para o arquivo e excluir.
Então o gatilho seria apenas:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
e Stored Procedure para copiar para o arquivo - que você pode executar a partir do trabalho:
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