sql >> Databasteknik >  >> RDS >> Sqlserver

exportera infogade tabelldata till .txt-fil i SQL-server

Du kan skapa en annan tabell för att tillfälligt lagra resultaten från INSERTED innan du anropar 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: Tydligen kommer detta inte att fungera, eftersom tabellen tempInserted är låst vid tidpunkten bcp kallas.

Här är en lösningsidé, kanske inte den mest eleganta lösningen men borde fungera (om du inte är på expressutgåva). Du kan använda trigger bara för att lagra infogade data i den här tabellen och du kan skapa ett jobb som körs med jämna mellanrum (låt oss säga var 5:e minut) och läsa från den tabellen, kopiera till fil och ta bort.

Så triggern skulle bara vara:

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

och lagrad procedur för att kopiera till fil - som du kan köra från 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. SSL självsignerade certifieringar för att ansluta till Mysql med PHP

  2. Skapa trigger för att logga SQL som påverkade tabellen?

  3. flera sökvärden i php och mysql

  4. Fullständig lista över teckenuppsättningar som stöds av MariaDB