sql >> Database >  >> RDS >> Sqlserver

ingevoegde tabelgegevens exporteren naar .txt-bestand in SQL-server

U kunt een andere tabel maken voor het tijdelijk opslaan van de resultaten van INSERTED voordat u bcp belt .

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

BEWERKEN: Blijkbaar werkt dit niet, want tabel tempInserted is vergrendeld op het moment bcp wordt gebeld.

Hier is een idee voor een tijdelijke oplossing, misschien niet de meest elegante oplossing, maar zou moeten werken (als u geen express-editie gebruikt). U kunt trigger gebruiken om de ingevoegde gegevens in deze tabel op te slaan en u kunt een taak maken die periodiek wordt uitgevoerd (laten we zeggen om de 5 minuten) en uit die tabel lezen, naar bestand kopiëren en verwijderen.

Dus trigger zou gewoon zijn:

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

en opgeslagen procedure om naar bestand te kopiëren - die u vanuit de taak kunt uitvoeren:

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. probleem met kolomnaam 'type' in rails 3

  2. MySQL Storage Engine-optimalisatie:InnoDB-optimalisatie configureren voor hoge prestaties

  3. Wetenschappelijke notatie casten (van varchar -> numeriek) in een weergave

  4. Hoe krijg ik een telling, zelfs als er geen resultaten zijn die overeenkomen met mysql?