Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

експортиране на вмъкнати таблични данни в .txt файл в SQL сървър

Можете да създадете друга таблица за временно съхраняване на резултатите от INSERTED преди да извикате 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

РЕДАКТИРАНЕ: Очевидно това няма да работи, защото таблицата tempInserted е заключен в момента bcp се нарича.

Ето една идея за заобиколно решение, може би не най-елегантното решение, но трябва да работи (ако не използвате експресно издание). Можете да използвате тригер само за съхраняване на вмъкнатите данни в тази таблица и можете да създадете задание, което да се изпълнява периодично (да речем на всеки 5 минути) и да чете от тази таблица, да копира във файл и да изтрива.

Така че тригерът ще бъде просто:

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

и съхранена процедура за копиране във файл - която можете да стартирате от заданието:

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. Какви са предимствата на VistaDB

  2. Неуспешно влизане за потребител „NT AUTHORITY\ANONYMOUS LOGON“ Възможен проблем с низа за връзка?

  3. Свързване на множество редове от множество таблици

  4. Как мога програмно да създам DSN?

  5. Каква е ползата от използването на SET XACT_ABORT ON в съхранена процедура?