Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Exportieren Sie eingefügte Tabellendaten in eine .txt-Datei in SQL Server

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