web-dev-qa-db-fra.com

Nouveau problème de ligne lors de la copie de données à partir de SQL Server 2012 vers Excel

J'ai récemment mis à niveau vers SQL2012 et j'utilise Management Studio. Une de mes colonnes de la base de données contient une CHAR(13) + CHAR(10).

Lorsque j'utilisais SQL Server 2008, cela copiait et collait parfaitement dans Excel. Maintenant, toutefois, copier et coller les mêmes données crée un nouveau retour ligne/chariot dans les données que j'ai dans Excel.

Existe-t-il un paramètre que j'ai manqué dans SQL2012 qui permettra de résoudre ce problème? Je ne veux pas simplement REPLACE(CHAR(13) + CHAR(10)) sur chaque sélection de base de données, car je n'aurais plus besoin d'utiliser SELECT * pour définir chaque colonne.

62
MrPink

Ma meilleure hypothèse est que ce n'est pas un bogue, mais une fonctionnalité de SQL 2012. ;-) Dans d'autres contextes, vous seriez heureux de conserver vos CR-LF, comme lors de la copie d'un gros morceau de texte. C'est juste que cela ne fonctionne pas bien dans votre situation.

Vous pouvez toujours les supprimer dans votre choix. Cela rendrait votre requête comme vous le souhaitez dans les deux versions:

select REPLACE(col, CHAR(13) + CHAR(10), ', ') from table
50
Robert Jeppesen

J'ai trouvé une solution de contournement pour le problème; au lieu de copier-coller à la main, utilisez Excel pour vous connecter à votre base de données et importer le tableau complet. Supprimez ensuite les données qui ne vous intéressent pas.

Voici les étapes (pour Excel 2010)

  1. Aller au menu Data > Get external data: From other sources > From SQL Server
  2. Tapez le nom du serveur SQL (et les informations d'identification si vous n'avez pas d'authentification Windows sur votre serveur) et connectez-vous.
  3. Sélectionnez la base de données et la table contenant les données avec les nouvelles lignes et cliquez sur 'Terminer'.
  4. Sélectionnez la feuille de calcul de destination et cliquez sur 'Ok'.

Excel va maintenant importer le tableau complet avec les nouvelles lignes intactes.

25
THelper

Ceci est résolu en ajoutant une nouvelle option Conserver CR\LF lors de la copie ou de la sauvegarde sous le menu Outils -> Options ..., Requête Résultats -> SQL Server -> Résultats sur la grille.

Vous devez ouvrir une nouvelle session (fenêtre) pour que le changement prenne place.

La valeur par défaut est Unselected (false), ce qui signifie que la copie/l'enregistrement à partir de la grille copie le texte tel qu'il est affiché (CR\LF étant remplacé par des espaces). Si la valeur est true, le texte sera copié/enregistré à partir de la grille telle qu'elle est réellement stockée, sans remplacement de caractère.

Si des personnes manquaient de suivre la chaîne d'éléments de connexion (menant à https://connect.Microsoft.com/SQLServer/feedback/details/735714 ), ce problème a été résolu dans la version préliminaire de SSMS. .

Vous pouvez le télécharger gratuitement à partir de https://msdn.Microsoft.com/library/mt238290.aspx , il s'agit d'un téléchargement autonome, de sorte qu'il n'est plus nécessaire d'utiliser l'intégralité du support SQL.

(Remarque - la page à l’adresse https://msdn.Microsoft.com/library/ms190078.aspx n’a pas été mise à jour avec ces informations. Je suis en train de faire un suivi à ce sujet. option bientôt)

22
Charles Gagnon

Le meilleur moyen que j'ai utilisé pour inclure les retours à la ligne/les sauts de ligne dans le résultat (Copier/Copier avec en-têtes/Enregistrer les résultats sous) pour la copie dans Excel est d'ajouter les guillemets doubles dans le SELECT, par exemple :

 SELECT '"' + ColumnName + '"' AS ColumnName FROM TableName;

Si les données de colonne elles-mêmes peuvent contenir des guillemets doubles, vous pouvez les échapper en les citant deux fois:

 SELECT '"' + REPLACE(ColumnName, '"', '""') + '"' AS ColumnName FROM TableName;

Les données de colonne vides apparaîtront sous la forme de deux guillemets doubles dans SQL Management Studio, mais la copie dans Excel produira une cellule vide. NULL les valeurs seront conservées, mais cela peut être modifié en utilisant CONCAT('"', ColumnName, '"') ou COALESCE(ColumnName, '').

Comme l'a commenté @JohnLBevan, l'échappement de données de colonne peut également être effectué à l'aide de la fonction intégrée QUOTENAME :

 SELECT QUOTENAME(ColumnName, '"') AS ColumnName FROM TableName;
13
Ronald

La suggestion de @ AHiggins a bien fonctionné pour moi:

REPLACE(REPLACE(REPLACE(B.Address, CHAR(10), ' '), CHAR(13), ' '), CHAR(9), ' ')
5
Sunde

Voyant que ce n'est pas déjà mentionné ici et c'est comme ça que j'ai résolu le problème ...

Cliquez avec le bouton droit sur la base de données cible et choisissez Tasks > Export data et suivez cela jusqu'au bout. L'une des destinations sur l'écran "Choisissez une destination" est Microsoft Excel et une étape consiste à accepter votre requête.

C'est l'assistant d'importation et d'exportation de SQL Server. C’est beaucoup plus long que la simple option Copier avec en-têtes que j’utilise normalement, mais épargnez-vous beaucoup plus, si vous avez beaucoup de données pour accéder à Excel, c’est une bonne option.

3
A. Murray

Cela se produit parfois avec Excel lorsque vous avez récemment utilisé "Texte en colonnes".

Essayez de quitter Excel, de rouvrir et de coller à nouveau. Cela fonctionne généralement pour moi, mais je vous ai entendu dire que vous devez parfois redémarrer votre ordinateur.

3
Alex

La "solution de contournement" suivante conserve le CRLF et prend en charge le collage de données avec des caractères CRLF dans Excel sans fractionner les données de colonne en plusieurs lignes. Il faudra remplacer "select *" par les colonnes nommées et les guillemets dans les données seront remplacés par la valeur du délimiteur.

declare @delimiter char(1)
set @delimiter = '|'

declare @double_quote char(1)
set @double_quote = '"'

declare @text varchar(255)
set @text = 'This
"is"
a
test'

-- This query demonstrates the problem.  Execute the query and then copy/paste into Excel.
SELECT @text

-- This query demonstrates the solution.
SELECT @double_quote + REPLACE(@text, @double_quote, @delimiter) + @double_quote
1
Jim Simoens

Pour pouvoir copier et coller les résultats de SQL Server Management Studio 2012 vers Excel ou pour les exporter au format Csv avec des séparateurs de liste, vous devez d'abord modifier l'option de requête.

  1. Cliquez sur Requête, puis sur les options.
  2. Sous Résultats, cliquez sur la grille.
  3. Cochez la case à côté de:

    Des chaînes de devis contenant des séparateurs de liste lors de la sauvegarde des résultats .csv.

Cela devrait résoudre le problème.

1
Paul McLeod

Une solution de contournement moins idéale consiste à utiliser l'interface graphique de 2008 par rapport à la base de données 2012 pour copier les résultats de la requête. Certaines fonctionnalités telles que "table de script en tant que CREATE" ne fonctionnent pas, mais vous pouvez exécuter des requêtes et copier-coller les résultats dans Excel, etc. à partir d'une base de données 2012 sans aucun problème.

Microsoft doit résoudre ce problème!

1
Eric Steinmetz

Vous pouvez essayer d'enregistrer les résultats de la requête en tant qu'Excel et changer l'extension de fichier en .txt. Ouvrez en utilisant Excel (ouvert avec ...) puis utilisez du texte pour les colonnes (formatage en tant que texte). Vous ne savez pas si cela fonctionnera dans cette situation, mais pour d'autres problèmes de mise en forme qu'Excel supprime automatiquement.

0
rossmcbain
  • Si votre table contient un champ nvarchar(max), déplacez-le au bas de la table.
  • Si le type de champ est différent de nvarchar (max), identifiez le ou les champs incriminés et utilisez la même technique.
  • Sauvegarde le.
  • Resélectionnez la table en SQL.
  • Si vous ne parvenez pas à enregistrer sans modification, vous pouvez activer temporairement les avertissements pertinents dans TOOLS | OPTIONS. Cette méthode ne comporte aucun risque.
  • Copiez et collez l'affichage SQL GRID avec des en-têtes vers Excel.
  • Les données peuvent toujours présenter un retour chariot, mais au moins vos données se trouvent toutes sur la même ligne.
  • Sélectionnez ensuite tous les enregistrements de ligne et effectuez un tri personnalisé sur la colonne ID.
  • Tous vos enregistrements doivent maintenant être intacts et consécutifs.
0
XGIS

vous pouvez vraiment savoir quelles lignes/données ont des retours à la ligne et corriger les données source .. au lieu de simplement mettre un bandaid dessus.

UPDATE table Set Field = Remplacer (Remplacer (Champ, CHAR (10), ''), CHAR (13), '') WHERE Champ tel que '%' + CHAR (10) + '%' ou champ tel que '%' + CHAR (13) + '%'

0
Aaron Kempf

Comme je suis souvent obligé de copier des données SQL vers Excel, j'ai créé une fonction permettant de traiter les nouvelles lignes et les caractères de tabulation (qui déplacent les colonnes après le collage dans Excel).

CREATE FUNCTION XLS(@String NVARCHAR(MAX) )

RETURNS NVARCHAR(MAX)
AS
BEGIN
    SET @String = REPLACE (@String, CHAR(9), ' ')
    SET @String = REPLACE (@String, CHAR(10), ' ')
    SET @String = REPLACE (@String, CHAR(13), ' ')
    RETURN @String
END

CREATE FUNCTION XLS(@String NVARCHAR(MAX) )
RETURNS NVARCHAR(MAX)

AS
BEGIN
    SET @String = REPLACE (@String, CHAR(9), ' ')
    SET @String = REPLACE (@String, CHAR(10), ' ')
    SET @String = REPLACE (@String, CHAR(13), ' ')
    RETURN @String
END

Exemple d'utilisation:

SELECT dbo.XLS(Description) FROM Server_Inventory
0
essential

Changer toutes mes requêtes parce que Studio n'a pas changé de version n'est pas une option. Essayé les préférences mentionnées ci-dessus sans effet. Il n'a pas mis les citations lorsqu'il y avait un CR-LF. Peut-être que cela ne se déclenche que lorsqu'une virgule apparaît.

Le copier-coller dans Excel est l’un des piliers du serveur SQL. Mircosoft a besoin d’une case à cocher pour revenir au comportement de 2008 ou d’améliorer le transfert du presse-papiers vers Excel de telle sorte que ONE ROW EGAL ONE ROW.

0
user922020

J'ai rencontré le même problème. J'ai pu obtenir mes résultats sur un CSV en utilisant la solution suivante:

  1. Exécuter l'ordre
  2. Clic droit dans le coin supérieur gauche de la grille de résultats
  3. Sélectionnez "Enregistrer les résultats sous .."
  4. Choisissez CSV et alto!
0
Scott Thornton

Au lieu de copier et coller dans Excel, vous pouvez exporter vers Excel. Faites un clic droit sur la base de données -> Tâches -> Exporter des données ...

  • Source: SQL Server Native Client
  • Destination: Excel
  • Spécifiez une copie de table ou une requête: choisissez une requête et entrez votre requête

CR/LF retenu dans les données.

BONUS (les valeurs NULL ne sont pas copiées sous la forme 'NULL').

0
Eric Labashosky