Esportazione di una query su csv in automatico

di il
20 risposte

Esportazione di una query su csv in automatico

Buongiorno a tutti,
e la prima volta che affronto trigger e store procedure ecc.
Avrei bisogno di un qualcuno che mi spieghi, come realizzare un'esportazione autmatica di una query in un file csv.
Su internet ho trovato questo codice :

	exec master..xp_cmdshell 'bcp " 
	SELECT A.CODICE AS CDARTICO, A.DESCR  AS DEARTICO, A.DESCR1 AS DE1ARTICO, I.CODICE ........." 
	queryout "c:\CANTIERI\articoli.txt" -c  -S KSSRV1 -C 	ANSI -t";" -U"*******" -P"**********"'
Questo script dovrebbe partire in automatico con una trigger su una tabella di un database:

ALTER TRIGGER [dbo].[TRIGGER_ARTICO] 
   ON [dbo].[ARTICO]
   AFTER INSERT, UPDATE
AS 
BEGIN
	exec master..xp_cmdshell 'bcp " 
	SELECT A.CODICE AS CDARTICO, A.DESCR  AS DEARTICO, A.DESCR1 AS DE1ARTICO, I.CODICE ........." 
	queryout "c:\CANTIERI\articoli.txt" -c  -S KSSRV1 -C 	ANSI -t";" -U"*******" -P"**********"
dbo.LINEEP L ON A.IDLINEEP = L.ID WHERE A.ONWEB = -1" queryout "c:\CANTIERI\articoli.txt" -c -S KSSRV1 -C ANSI -t";" -U"****" -P"****"'
END
[/code]
C'è qualcuno che può darmi una mano.
Grazia a tutti

20 Risposte

  • Re: Esportazione di una query su csv in automatico

    Salve,
    non ho compreso che problema vedi...
    il trigger indicato chiama il tool bcp.exe utilizzando la stored procedure di sistema xp_cmdshell ...
    qui identifico una problematica di "sicurezza" in quanto richiede espressamente che xp_cmdshell sia abilitata a livello di istanza, contro le impostazioni di sicurezza predefinite, ma questo non e' un problema vincolante...
    il resto del comando e' una query con i parametri richiesti da bcp per eseguire l'esportazione su file...
    che problema riscontri??
    salutoni
    --
    Andrea
  • Re: Esportazione di una query su csv in automatico

    La difficoltà sta nel semplice fatto che è la prima volta che devo fare questa importazione su file (excel, csv), di dati estratti da tabelle conesse ad un DB.
    Il codice che ho postato è un estrazione di ricerche online da vari siti.
    Mi servirebbe una linea guida coretta che mi spieghi meglio la procedura per mettere su un codice che funzioni discretamente per il momento.

    Devo fare in modo che queste estrazioni devono avvenire:
    - O tramite trigger connesso direttamente alla tabella specifica, così ad ogni modifica o inserimento o cancellazione esporti i dati estratti con sql su file.
    - O tramite procedura schedulata che ad ogni ora X esporti i dati estratti con sql su file.
    Ringrazio anticipatamente chi riposnderà.
  • Re: Esportazione di una query su csv in automatico

    DrJekill89 ha scritto:


    ...
    ad ogni modifica o inserimento o cancellazione esporti i dati estratti con sql su file.
    ...
    Ma intendi che devi salvare su file i record prima delle modifiche (per es. quelli cancellati) come una sorta di Log o cosa ?
  • Re: Esportazione di una query su csv in automatico

    Ciao, intendo che al trigger collegato alla tabella x, ogni modifica o inserimento o cancellazione di un record (di quella tabella) deve partire un esport dei dati estratti con sql su file csv
  • Re: Esportazione di una query su csv in automatico

    ... non ci siamo capiti
  • Re: Esportazione di una query su csv in automatico

    No non mi serve nessu log dei record cancellati, solo il contenuto dei dati ad ogni evento di update, insert e delete.
  • Re: Esportazione di una query su csv in automatico

    DrJekill89 ha scritto:


    No non mi serve nessu log dei record cancellati, solo il contenuto dei dati ad ogni evento di update, insert e delete.
    .. che è cosa diversa dall'esportare la tabella
    con una procedura schedulata ad una certa ora x di cui
    hai parlato prima

    ... troppe domande per capire cosa vuoi fare
  • Re: Esportazione di una query su csv in automatico

    Ma prima avevo spiegato qeuesto:
    "La difficoltà sta nel semplice fatto che è la prima volta che devo fare questa importazione su file (excel, csv), di dati estratti da tabelle conesse ad un DB.

    Mi servirebbe una linea guida coretta che mi spieghi meglio la procedura per mettere su un codice che funzioni discretamente per il momento.

    Devo fare in modo che queste estrazioni devono avvenire:
    - O tramite trigger connesso direttamente alla tabella specifica, così ad ogni modifica o inserimento o cancellazione esporti i dati estratti con sql su file.
    - O tramite procedura schedulata che ad ogni ora X esporti i dati estratti con sql su file.
    Ringrazio anticipatamente chi riposnderà.
    "
    mi scuso per le troppe domande..
  • Re: Esportazione di una query su csv in automatico

    Salve,
    buttato cosi', una chiamata a bcp.exe la vedo fuori luogo, anche perche' non hai accesso diretto alla tabella virtuale inserted/deleted... ed in ogni caso hai confermato che devi solo esportare le righe presenti in queste tabelle virtuali...
    https://www.codeproject.com/Questions/839085/MS-SQL-after-insert-trigger-export-inserted-to-fil
    mi pare un'ottima soluzione...
    salutoni
    --
    Andrea
  • Re: Esportazione di una query su csv in automatico

    Buongiorno e grazie per il suo intervento, appena possibie controllerò questo link che mi ha consigliato.
    Cordiali Saluti
  • Re: Esportazione di una query su csv in automatico

    Buongiorno a tutti,
    adesso che ho capito come fare l'esportazione, dovrei fare il passaggio inverso. Da un file .xls dovrei inserire il suo contenuto in una tabella esistente di un DB.
    Grazie in anticipo a ci può darmi due dritte.
    Cordiali Saluti
  • Re: Esportazione di una query su csv in automatico

    Salve,
    https://www.mssqltips.com/sqlservertip/6178/read-excel-file-in-sql-server-with-openrowset-or-opendatasource/

    salutoni
    --
    Andrea
  • Re: Esportazione di una query su csv in automatico

    Grazie mille Sig.r Andrea per la celere risposta.
    Saluti
  • Re: Esportazione di una query su csv in automatico

    Sto provado a fare un inserimento di un record, leggendo da un file excel, sql server mi scaturisce questo messsaggio:
    "Messaggio 8101, livello 16, stato 1, riga 1
    È possibile specificare un valore esplicito per la colonna Identity nella tabella 'COMTES' solo quando si utilizza un elenco di colonne e IDENTITY_INSERT ha valore ON."
    posto anche il codice:
    
     USE SAMRD;
    GO
    INSERT INTO COMTES
    select *
    FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
        'Data Source=C:\CANTIERI\COMTES.xls;Extended Properties=Excel 12.0')...[Foglio1$];
    GO
    
Devi accedere o registrarti per scrivere nel forum
20 risposte