Puede crear otra tabla para almacenar temporalmente los resultados de INSERTED
antes de llamar a 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 esto no funcionará, porque la tabla tempInserted
está bloqueado en el momento bcp
se llama.
Aquí hay una idea alternativa, tal vez no sea la solución más elegante, pero debería funcionar (si no está en la edición Express). Puede usar el activador solo para almacenar los datos insertados en esta tabla y puede crear un trabajo que se ejecute periódicamente (digamos cada 5 minutos) y leer de esa tabla, copiar en un archivo y eliminar.
Así que el disparador sería simplemente:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
y procedimiento almacenado para copiar en un archivo, que puede ejecutar desde el trabajo:
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