Esportare il risultato della query nel file .csv in SQL Server 2008

Come posso esportare un risultato di una query in un file .csv in SQL Server 2008?

  1. Aprire SQL Server Management Studio
  2. Vai su Strumenti> Opzioni> Risultati della query> SQL Server> Risultati in testo
  3. All’estrema destra, c’è una casella a discesa chiamata Formato di uscita
  4. Scegli Virgola delimitato e fai clic su OK

Ecco una versione a schermo intero di quella immagine, qui sotto

inserisci la descrizione dell'immagine qui

Questo mostrerà i risultati della query come testo delimitato da virgole.

Per salvare i risultati di una query in un file: Ctrl + Maiusc + F

So che questo è un po ‘vecchio, ma qui è un modo molto più semplice …

  1. Esegui la query con le impostazioni predefinite (mette i risultati in formato griglia, se i tuoi non sono in formato griglia, vedi sotto)

  2. Fare clic con il tasto destro sui risultati della griglia e fare clic su “Salva risultati con nome” e salvarlo.

Se i risultati non sono in formato griglia, fai clic con il pulsante destro del mouse nel punto in cui scrivi la query, passa con il mouse su “Risultati in” e fai clic su “Risultati su griglia”.

In bocca al lupo!

È ansible utilizzare PowerShell

 $AttachmentPath = "CV File location" $QueryFmt= "Query" Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath 

Se il database in questione è locale, il seguente è probabilmente il modo più efficace per esportare un risultato di una query in un file CSV (ovvero, fornendo il massimo controllo).

  1. Copia la query.
  2. In Esplora oggetti, fare clic con il tasto destro del mouse sul database in questione.
  3. Seleziona “Attività” >> “Esporta dati …”
  4. Configura la tua origine dati e fai clic su “Avanti”.
  5. Scegli “File flat” o “Microsoft Excel” come destinazione.
  6. Specificare un percorso di file.
  7. Se si lavora con un file flat, configurare come desiderato. Se si lavora con Microsoft Excel, selezionare “Excel 2007” (le versioni precedenti hanno un limite di righe a 64k)
  8. Seleziona “Scrivi una query per specificare i dati da trasferire”
  9. Incolla la query dal passaggio 1.
  10. Fare clic su Avanti >> rivisita i mapping >> fare clic su Avanti >> selezionare “Esegui immediatamente” >> fare clic su “Fine” due volte.

Dopo aver esaminato questo processo in modo esaustivo, ho trovato la seguente opzione migliore

Script di PowerShell

 $dbname = "**YOUR_DB_NAME_WITHOUT_STARS**" $AttachmentPath = "c:\\export.csv" $QueryFmt= @" **YOUR_QUERY_WITHOUT_STARS** "@ Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation 

Esegui PowerShell come amministratore

 & "c:\path_to_your_ps1_file.ps1" 

Usa T-SQL :

 INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]') SELECT Field1, Field2, Field3 FROM DatabaseName 

Ma ci sono un paio di avvertenze:

  1. È necessario disporre del provider Microsoft.ACE.OLEDB.12.0 disponibile. Anche il provider Jet 4.0 funzionerà, ma è antico, quindi ho usato questo.

  2. Il file .CSV dovrà esistere già. Se utilizzi le intestazioni ( HDR=YES ), assicurati che la prima riga del file .CSV sia un elenco delimitato di tutti i campi.

MS Excel -> Dati -> Nuova query -> Dal database .. seguire i passaggi

Basandosi sulla risposta di NS, ho uno script PowerShell che esporta in un file CSV con le virgolette attorno al campo e separati da virgola e salta le informazioni di intestazione nel file.

 add-pssnapin sqlserverprovidersnapin100 add-pssnapin sqlservercmdletsnapin100 $qry = @" Select * From tablename "@ Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv" 

Le prime due righe abilitano la possibilità di usare il comando-let di Invoke-SqlCmd .

L’utilizzo della tecnica nativa di SQL Server Management Studio per esportare in CSV (come suggerito da @ 8kb) non funziona se i valori contengono virgole, perché SSMS non racchiude i valori tra virgolette. Un modo più efficace per me è quello di copiare semplicemente i risultati (fare clic all’interno della griglia e quindi CTRL-A, CTRL-C) e incollarlo in Excel. Quindi salvare come file CSV da Excel.

È ansible utilizzare QueryToDoc ( http://www.querytodoc.com ). Ti consente di scrivere una query su un database SQL ed esportare i risultati – dopo aver selezionato il delimitatore – in Excel, Word, HTML o CSV

 INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]') SELECT Field1, Field2, Field3 FROM DatabaseName 

come @Slogmeister Extraordinaire Citato è corretto.

È necessario avere 1> File già presente con le colonne 2> È necessario installare Office

Errori affrontati

1

Messaggio 7303, livello 16, stato 1, riga 1 Imansible inizializzare l’object origine dati del provider OLE DB “Microsoft.ACE.OLEDB.12.0” per il server collegato “(null)”. ”

64 bit http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe

32 bit http://download.microsoft.com/download/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exe

2

Il messaggio 15281, livello 16, stato 1, riga 1, SQL Server ha bloccato l’accesso a STATEMENT “OpenRowset / OpenDatasource” del componente “Query distribuite ad hoc” perché questo componente è distriggersto come parte della configurazione di sicurezza per questo server. Un amministratore di sistema può abilitare l’uso di “query distribuite ad hoc” utilizzando sp_configure. Per ulteriori informazioni sull’triggerszione di “query distribuite ad hoc”, cercare “query distribuite ad hoc” nella documentazione online di SQL Server.

 EXEC sp_configure 'show advanced options', 1 RECONFIGURE GO EXEC sp_configure 'ad hoc distributed queries', 0 RECONFIGURE GO 

Se non vuoi usare Powershell, questa risposta è una variazione sulla grande risposta di 8kb. L’unica differenza è che invece di selezionare CSV come formato di output, selezionare Tab Delimited. In questo modo se ci sono virgole nei tuoi dati, non salteranno le celle in Excel. Inoltre, se il delimitatore predefinito di Excel è impostato su tabs, puoi semplicemente copiare tutti i risultati della query SSMS (CTRL-A, CTRL-C) e incollarlo in Excel (non è necessario salvarlo come file e importarlo in Excel ):

  • In SSMS Vai a Strumenti> Opzioni> Risultati della query> SQL Server> Risultati in testo
  • Modifica il formato di output all’estrema destra su Tab Delimited
  • Clicca OK

Ora puoi eseguire la query, quindi fare un CTRL-A per selezionare tutti i risultati, quindi CTRL-C per copiare negli appunti, quindi passare a Excel 2013 (potrebbe funzionare anche nel 2007, non sono sicuro) e incollare – assumendo l’impostazione predefinita di Excel delimitatore è impostato su tab.

Immagine della schermata Opzioni query SSMS

Sì, tutti questi sono possibili quando si ha accesso diretto ai server. Ma cosa succede se si ha solo accesso al server da un server web / applicativo? Bene, la situazione era questa con noi molto tempo fa e la soluzione era SQL Server Export to CSV .