Můžete vytvořit další tabulku pro dočasné uložení výsledků z INSERTED
před voláním 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
UPRAVIT: Zřejmě to nebude fungovat, protože tabulka tempInserted
je uzamčen v čase bcp
se nazývá.
Zde je nápad na řešení, možná to není nejelegantnější řešení, ale mělo by fungovat (pokud nejste na expresní verzi). Spouštěč můžete použít pouze k uložení vložených dat do této tabulky a můžete vytvořit úlohu, která se spouští periodicky (řekněme každých 5 minut) a číst z této tabulky, kopírovat do souboru a mazat.
Takže spouštěč by byl jen:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
a Uložená procedura ke zkopírování do souboru – kterou můžete spustit z úlohy:
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