Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

eksport wstawionych danych tabeli do pliku .txt na serwerze SQL

Możesz utworzyć kolejną tabelę do tymczasowego przechowywania wyników z INSERTED przed wywołaniem 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

EDYTUJ: Najwyraźniej to nie zadziała, ponieważ tabela tempInserted jest zablokowany w czasie bcp nazywa się.

Oto pomysł na obejście, może nie najbardziej eleganckie rozwiązanie, ale powinno działać (jeśli nie masz edycji ekspresowej). Możesz użyć wyzwalacza tylko do przechowywania wstawionych danych do tej tabeli i możesz utworzyć zadanie, które będzie uruchamiane okresowo (powiedzmy co 5 minut) i odczytuje z tej tabeli, kopiuje do pliku i usuwa.

Tak więc wyzwalacz byłby po prostu:

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

i Stored Procedure do skopiowania do pliku - które można uruchomić z zadania:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmniejszyć rozmiar pliku danych w SQL Server (T-SQL)

  2. Jak zmienić schemat db na dbo

  3. 3 pytania dotyczące monitorowania serwera SQL przy przejmowaniu stanowiska DBA

  4. Funkcja TRANSLATE w SQL SERVER

  5. Generowanie skryptu dla podzbioru danych