Come posso esportare un risultato della query in un file .csv in SQL Server 2008?
Come posso esportare un risultato della query in un file .csv in SQL Server 2008?
Risposte:
Ecco una versione a schermo intero di quell'immagine, di seguito
Questo mostrerà i risultati della tua query come testo delimitato da virgole.
Per salvare i risultati di una query in un file: Ctrl + Maiusc + F
Ctrl+Shift+F
, cambia solo la modalità di output, non influisce sui risultati se è già stata eseguita la query. Affinché ciò si rifletta, è necessario rieseguire la query. Quando lo esegui in modalità "Risultati su file", ti verrà chiesto dove desideri salvare i risultati.
So che è un po 'vecchio, ma qui è un modo molto più semplice ...
Esegui la query con le impostazioni predefinite (inserisce i risultati in formato griglia, se il tuo non è in formato griglia, vedi sotto)
Fare clic 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 sul punto in cui scrivi la query, passa con il mouse su "Risultati in" e fai clic su "Risultati in griglia"
Ricorda di NON catturare le intestazioni di colonna!
In bocca al lupo!
È possibile utilizzare PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
e Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(ma non avevo bisogno di agganciare quei Cmdlet). Inoltre, avevo salvato i comandi in uno script, che non avrebbe eseguito fino a quando avessi cambiato il criterio di esecuzione: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
basterà una politica di esecuzione.
Se il database in questione è locale, il seguente è probabilmente il modo più affidabile per esportare un risultato della query in un file CSV (ovvero, offrendoti il massimo controllo).
Dopo aver completato questo processo in modo esauriente, ho trovato quanto segue l'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"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Sulla base della 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 dell'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 consentono di usare il comando invoke-SqlCmd .
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:
È necessario disporre del provider Microsoft.ACE.OLEDB.12.0 disponibile. Anche il provider Jet 4.0 funzionerà, ma è antico, quindi ho usato questo.
Il file .CSV dovrà esistere già. Se stai usando le intestazioni ( HDR=YES
), assicurati che la prima riga del file .CSV sia un elenco delimitato di tutti i campi.
L'uso della tecnica nativa di SQL Server Management Studio per esportare in CSV (come suggerito da @ 8kb) non funziona se i valori contengono virgole, poiché SSMS non racchiude i valori tra virgolette doppie. Un modo più affidabile che ha funzionato per me è semplicemente copiare i risultati (fare clic all'interno della griglia e quindi CTRL-A, CTRL-C) e incollarlo in Excel. Quindi salva come file CSV da Excel.
È possibile utilizzare QueryToDoc ( http://www.querytodoc.com ). Ti consente di scrivere una query su un database SQL ed esportare i risultati - dopo aver scelto 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 avere Office installato
Errori affrontati
Messaggio 7303, livello 16, stato 1, riga 1 Impossibile inizializzare l'oggetto origine dati del provider OLE DB "Microsoft.ACE.OLEDB.12.0" per il server collegato "(null)". "
Messaggio 15281, livello 16, stato 1, riga 1 SQL Server ha bloccato l'accesso a STATEMENT 'OpenRowset / OpenDatasource' del componente 'Ad Hoc Distributed Queries' perché questo componente è disattivato 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'abilitazione 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 della risposta eccezionale di 8kb. L'unica differenza è che invece di selezionare CSV come formato di output, selezionare Delimitato da tabulazione. In questo modo se ci sono virgole nei tuoi dati, non salterà le celle in Excel. Inoltre, se il delimitatore predefinito di Excel è impostato su schede, puoi semplicemente fare una copia di tutti i risultati della query SSMS (CTRL-A, CTRL-C) e incollare in Excel (non è necessario salvare come file e importare in Excel ):
Ora puoi eseguire la tua 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 il valore predefinito di Excel delimitatore è impostato su tab.
Sì, tutti questi sono possibili quando si ha accesso diretto ai server. Ma cosa succede se si ha accesso al server solo da un web / application server? Bene, la situazione era questa con noi da molto tempo e la soluzione era l' esportazione di SQL Server in CSV .