U kunt een andere tabel maken voor het tijdelijk opslaan van de resultaten van INSERTED
voordat u bcp
belt .
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
BEWERKEN: Blijkbaar werkt dit niet, want tabel tempInserted
is vergrendeld op het moment bcp
wordt gebeld.
Hier is een idee voor een tijdelijke oplossing, misschien niet de meest elegante oplossing, maar zou moeten werken (als u geen express-editie gebruikt). U kunt trigger gebruiken om de ingevoegde gegevens in deze tabel op te slaan en u kunt een taak maken die periodiek wordt uitgevoerd (laten we zeggen om de 5 minuten) en uit die tabel lezen, naar bestand kopiëren en verwijderen.
Dus trigger zou gewoon zijn:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
en opgeslagen procedure om naar bestand te kopiëren - die u vanuit de taak kunt uitvoeren:
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