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

eksporter indsatte tabeldata til .txt-fil i SQL-server

Du kan oprette en anden tabel til midlertidig lagring af resultaterne fra INSERTED før du kalder 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

EDIT: Dette vil tilsyneladende ikke virke, fordi tabel tempInserted er låst på tidspunktet bcp kaldes.

Her er en løsningsidé, måske ikke den mest elegante løsning, men burde virke (hvis du ikke er på ekspresudgave). Du kan bruge trigger blot til at gemme de indsatte data i denne tabel, og du kan oprette et job, der kører periodisk (f.eks. hvert 5. minut) og læse fra den tabel, kopiere til fil og slette.

Så udløseren ville bare være:

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

og Lagret procedure for at kopiere til fil - som du kan køre fra jobbet:

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


  1. Sådan finder du alle kombinationer (undersæt) af enhver størrelse af et array i postgresql

  2. Mysql2::Fejl:Du har en fejl i din SQL-syntaks

  3. Brug af XAMPP og Mysql Workbench sammen

  4. Hvordan man bruger psycopg2 til at hente en bestemt nøgles værdi fra en postgres-tabel, som har nøgle-værdi-par