Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

esportare i dati della tabella inserita nel file .txt nel server SQL

Puoi creare un'altra tabella per la memorizzazione temporanea dei risultati da INSERTED prima di chiamare 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

MODIFICA: Apparentemente questo non funzionerà, perché la tabella tempInserted è bloccato al momento bcp viene chiamato.

Ecco un'idea di soluzione alternativa, forse non la soluzione più elegante ma dovrebbe funzionare (se non sei in edizione express). Puoi usare trigger solo per memorizzare i dati inseriti in questa tabella e puoi creare un lavoro che viene eseguito periodicamente (diciamo ogni 5 minuti) e leggere da quella tabella, copiare su file ed eliminare.

Quindi il trigger sarebbe solo:

create trigger monitorTrigger on test 
AFTER insert 
as
BEGIN
  INSERT INTO test2.dbo.tempInserted
  SELECT * FROM INSERTED
END

e Stored Procedure da copiare su file - che puoi eseguire dal lavoro:

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