sql >> Databáze >  >> RDS >> Sqlserver

export vložených dat tabulky do .txt souboru na SQL serveru

Můžete vytvořit další tabulku pro dočasné uložení výsledků z INSERTED před voláním 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

UPRAVIT: Zřejmě to nebude fungovat, protože tabulka tempInserted je uzamčen v čase bcp se nazývá.

Zde je nápad na řešení, možná to není nejelegantnější řešení, ale mělo by fungovat (pokud nejste na expresní verzi). Spouštěč můžete použít pouze k uložení vložených dat do této tabulky a můžete vytvořit úlohu, která se spouští periodicky (řekněme každých 5 minut) a číst z této tabulky, kopírovat do souboru a mazat.

Takže spouštěč by byl jen:

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

a Uložená procedura ke zkopírování do souboru – kterou můžete spustit z úlohy:

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. Oracle SQLPlus nastavení proměnné prostředí na základě proměnné

  2. Získejte ovlivněné řádky na ExecuteNonQuery

  3. Jak převést pole MySQL JSON na řetězec oddělený čárkami

  4. PHP související s PDO:Aktualizace příkazu SQL neaktualizuje obsah databáze