Comment puis-je exporter un résultat de requête vers un fichier .csv dans SQL Server 2008?
Comment puis-je exporter un résultat de requête vers un fichier .csv dans SQL Server 2008?
Réponses:
Voici une version plein écran de cette image, ci-dessous
Cela affichera les résultats de votre requête sous forme de texte délimité par des virgules.
Pour enregistrer les résultats d'une requête dans un fichier: Ctrl + Maj + F
Ctrl+Shift+F
, cela ne change que le mode de sortie, cela n'affecte pas les résultats si vous avez déjà exécuté la requête. Pour que cela soit reflété, vous devez réexécuter la requête. Lorsque vous l'exécutez en mode "Résultats dans fichier", il devrait vous demander où vous souhaitez enregistrer les résultats.
Je sais que c'est un peu vieux, mais voici un moyen beaucoup plus simple ...
Exécutez votre requête avec les paramètres par défaut (place les résultats au format grille, si votre requête n'est pas au format grille, voir ci-dessous)
Faites un clic droit sur les résultats de la grille et cliquez sur "Enregistrer les résultats sous" et enregistrez-le.
Si vos résultats ne sont pas au format grille, faites un clic droit à l'endroit où vous écrivez la requête, passez la souris sur «Résultats vers» et cliquez sur «Résultats sur grille»
Sachez que vous ne capturez PAS les en-têtes de colonne!
Bonne chance!
Vous pouvez utiliser PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
et Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(mais je n'avais pas besoin d' insérer ces applets de commande). En outre, j'avais sauvé les commandes dans un script qui ne fonctionneraient pas jusqu'à ce que j'avais changé la politique d'exécution: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
politique d'exécution suffira.
Si la base de données en question est locale, ce qui suit est probablement le moyen le plus robuste d'exporter un résultat de requête vers un fichier CSV (c'est-à-dire vous donnant le plus de contrôle).
Après avoir parcouru ce processus de manière exhaustive, j'ai trouvé que ce qui suit était la meilleure option
Script 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
Exécutez PowerShell en tant qu'administrateur
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
En m'appuyant sur la réponse de NS, j'ai un script PowerShell qui exporte vers un fichier CSV avec les guillemets autour du champ et séparés par des virgules et il ignore les informations d'en-tête dans le fichier.
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"
Les deux premières lignes permettent d'utiliser la commande-let Invoke-SqlCmd .
Utilisez 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
Mais, il y a quelques mises en garde:
Vous devez disposer du fournisseur Microsoft.ACE.OLEDB.12.0. Le fournisseur Jet 4.0 fonctionnera également, mais il est ancien, j'ai donc utilisé celui-ci à la place.
Le fichier .CSV devra déjà exister. Si vous utilisez headers ( HDR=YES
), assurez-vous que la première ligne du fichier .CSV est une liste délimitée de tous les champs.
L'utilisation de la technique native de SQL Server Management Studio pour exporter au format CSV (comme @ 8 Ko suggéré) ne fonctionne pas si vos valeurs contiennent des virgules, car SSMS ne place pas les valeurs entre guillemets. Une manière plus robuste qui a fonctionné pour moi est de simplement copier les résultats (cliquez à l'intérieur de la grille, puis CTRL-A, CTRL-C) et collez-les dans Excel. Puis enregistrez en tant que fichier CSV à partir d'Excel.
Vous pouvez utiliser QueryToDoc ( http://www.querytodoc.com ). Il vous permet d'écrire une requête sur une base de données SQL et d'exporter les résultats - après avoir choisi le délimiteur - vers Excel, Word, HTML ou 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
comme @Slogmeister Extraordinaire Quoted est correct.
Un besoin d'avoir 1> Fichier déjà présent avec les colonnes 2> Un besoin d'avoir Office installé
Erreurs rencontrées
Msg 7303, niveau 16, état 1, ligne 1 Impossible d'initialiser l'objet de source de données du fournisseur OLE DB "Microsoft.ACE.OLEDB.12.0" pour le serveur lié "(null)". "
Msg 15281, niveau 16, état 1, ligne 1 SQL Server a bloqué l'accès à STATEMENT 'OpenRowset / OpenDatasource' du composant 'Ad Hoc Distributed Queries' car ce composant est désactivé dans le cadre de la configuration de sécurité pour ce serveur. Un administrateur système peut activer l'utilisation de «requêtes distribuées ad hoc» à l'aide de sp_configure. Pour plus d'informations sur l'activation des «requêtes distribuées ad hoc», recherchez «requêtes distribuées ad hoc» dans la documentation en ligne de SQL Server.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Si vous ne souhaitez pas utiliser Powershell, cette réponse est une variante de la bonne réponse de 8kb. La seule différence est qu'au lieu de sélectionner CSV comme format de sortie, sélectionnez Délimité par des tabulations. De cette façon, s'il y a des virgules dans vos données, cela ne sautera pas les cellules dans Excel. De plus, si le délimiteur par défaut d'Excel est défini sur des onglets, vous pouvez simplement copier tous les résultats de la requête SSMS (CTRL-A, CTRL-C) et les coller dans Excel (pas besoin d'enregistrer en tant que fichier et d'importer dans Excel ):
Maintenant, vous pouvez exécuter votre requête, puis faire un CTRL-A pour sélectionner tous les résultats, puis CTRL-C pour copier dans le presse-papiers, puis passer à Excel 2013 (peut également fonctionner en 2007, pas sûr) et coller - en supposant la valeur par défaut d'Excel le délimiteur est défini sur tabulation.
Oui, tout cela est possible lorsque vous avez un accès direct aux serveurs. Mais que faire si vous n'avez accès au serveur qu'à partir d'un serveur Web / d'applications? Eh bien, la situation était la suivante avec nous il y a longtemps et la solution était l' exportation SQL Server vers CSV .