Sie können eine weitere Tabelle zum temporären Speichern der Ergebnisse von INSERTED
erstellen vor dem Aufruf von 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
BEARBEITEN: Scheinbar funktioniert das nicht, weil die Tabelle tempInserted
ist zum Zeitpunkt bcp
gesperrt heißt.
Hier ist eine Workaround-Idee, vielleicht nicht die eleganteste Lösung, sollte aber funktionieren (wenn Sie nicht auf Express Edition sind). Sie können Trigger verwenden, um die eingefügten Daten einfach in dieser Tabelle zu speichern, und Sie können einen Job erstellen, der regelmäßig ausgeführt wird (sagen wir alle 5 Minuten) und aus dieser Tabelle lesen, in eine Datei kopieren und löschen.
Trigger wäre also nur:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
und gespeicherte Prozedur zum Kopieren in eine Datei - die Sie über den Job ausführen können:
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