Je souhaite exporter mon grand résultat de requête SSMS (SQL Server Management Studio) (lignes de 2,5 m, 9 champs) au format .csv ou .txt délimité par des virgules (avec en-têtes). (Studio de gestion MS SQL Server 2005).
Pour que je puisse ensuite le lire ligne par ligne dans le programme VBA (pour effectuer certains calculs sur les données) ou effectuer des requêtes à ce sujet dans Excel (par exemple avec Microsoft Query). Les calculs sont compliqués et je préfère le faire ailleurs que SSMS.
Si je choisis "résultat de la requête en texte" dans SSMS et une petite réponse (quelques lignes, par exemple jusqu’à 200 000), je pourrais bien sûr simplement copier et coller dans un éditeur de texte. Pour ma grande réponse ici, je pourrais bien sûr copier et coller environ 200k lignes à la fois, 10 fois, dans un éditeur de texte comme Ultra-Edit. (Lorsque j'essaie tous les 2,5 m à la fois, un avertissement concernant la mémoire apparaît dans SSMS.) Mais pour l’avenir, j’aimerais une solution plus élégante.
Pour "résultat de la requête au fichier", SSMS écrit toujours dans un fichier .rpt. (Lorsque vous cliquez avec le bouton droit de la souris dans la fenêtre de résultats et que vous choisissez "Enregistrer sous", une erreur de mémoire se présente, comme ci-dessus.)
-> Il semble donc que ma seule option est de faire en sorte que SSMS produise le résultat dans un fichier, à savoir le fichier .rpt, puis convertisse le fichier .rpt au format .txt.
Je suppose que ce .rpt est un fichier Crystal Reports? Ou n'est-ce pas? Je n'ai pas Crystal Reports sur mon PC, je ne peux donc pas l'utiliser pour convertir le fichier.
Lorsque vous ouvrez le fichier .rpt dans Ultra-Edit, tout se passe bien. Cependant, dans Microsoft Query dans Excel, les en-têtes ne veulent pas être affichés.
Lorsque je lis et écris simplement le fichier .rpt avec VBA, la taille du fichier est réduite de moitié. (330meg à 180meg). Dans Microsoft Query, les en-têtes apparaissent maintenant (bien que le premier nom de champ ait un caractère principal amusant, ce qui m'est déjà arrivé dans d'autres situations totalement différentes). Je semble être capable de faire des tableaux croisés significatifs sur Excel.
Cependant, lorsque j'ouvre ce nouveau fichier dans Ultra-Edit, il affiche des caractères chinois! Peut-il y avoir encore des personnages amusants quelque part?
-> Existe-t-il une application de conversion gratuite (et simple/sûre) disponible quelque part. Ou devrais-je simplement croire que ce fichier .txt convient à la lecture de mon programme VBA.
Merci
Avec l’aide d’un ami, j’ai trouvé ma solution: les fichiers Rpt sont des fichiers texte créés dans MS SQL Server Management Studio, mais avec l’encodage UCS-2 Little Endian au lieu de ANSI.
-> Dans Ultra-Edit, l’option ‘fichier’, les options de conversion, unicode en ASCII ’a tout gâché. Le fichier texte est ramené de 330 mégawatts à 180 meg, Microsoft Query dans Excel peut maintenant voir les colonnes et VBA peut lire les lignes de fichier et de processus *.
P.s. Une autre alternative aurait été d'utiliser MS Access (qui peut gérer des résultats importants) et de se connecter avec ODBC à la base de données. Cependant, je devrais utiliser Jet-SQL, qui contient moins de commandes que le T-SQL de MS SQL Server Management Studio. Apparemment, on peut créer un nouveau fichier au format .adp dans MS Access 2007, puis utiliser T-SQL sur un serveur SQL Server. Mais dans MS Access 2010 (sur mon PC), cette option semble ne plus exister.
Méthode simple: dans SQL Server Management Studio, accédez au menu "Requête" et sélectionnez "Options de requête ..."> Résultats> Texte> Modifier le "Format de sortie" en "Délimité par des virgules". Maintenant, lancez votre requête pour exporter dans un fichier, puis une fois terminé, renommez le fichier de .rpt
à .csv
et il s’ouvrira dans Excel :).
Voici ma solution.
Vous pouvez utiliser BCP
Ouvrez une invite de commande, puis tapez ceci:
SET Q="select * from user1.dbo.table1"
BCP.EXE %Q% queryout query.out -S ServerName -T -c -t
-U -P
(au lieu de -T
) pour l'authentification SQL. Votre application a un problème avec UNICODE. Vous pouvez forcer une page de code à l'aide de -C {code page}
. En cas de doute, essayez 850.
-t
va forcer la tabulation comme délimiteur de champ, vous pouvez le changer pour une virgule -t,
La bonne chose est que vous pouvez appeler cela directement à partir de votre commande Shell en cours d'exécution VBA.
C'est la façon recommandée, je vois que vous pouvez le faire.
My Source (Réponse de DavidAir)
Choisissez "résultats dans la grille", puis cliquez avec le bouton droit de la souris sur la grille et sélectionnez "Enregistrer les résultats sous ...". Un fichier CSV sera enregistré.
En fait, il existe un problème avec le fait que si certaines valeurs contiennent des virgules - le fichier CSV résultant n'est pas correctement échappé. Le fichier RPT est en fait assez sympa car il contient des colonnes de largeur fixe. Si vous avez Excel, un moyen relativement facile de convertir le résultat en CSV consiste à ouvrir le fichier RPT dans Excel. Cela fera apparaître l'assistant d'importation de texte et Excel ferait un très bon travail pour deviner les colonnes. Parcourez l'assistant, puis enregistrez les résultats au format CSV.
Dans mon cas, j'exécute une requête sur SSMS (avant d'appuyer sur CTRL + SHIFT + F), le résultat ouvre une fenêtre pour l'enregistrer en tant que fichier rpt. Je ne pouvais pas le lire (aucune installation de Crystal Report sur mon ordinateur), donc. ..next time, j'ai exécuté la requête en l'enregistrant sous le format (tous les fichiers) avec l'extension * .txt, et c'est ce que j'ai pu lire sous forme de fichier texte.