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.
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
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)
Data > Get external data: From other sources > From SQL Server
Excel va maintenant importer le tableau complet avec les nouvelles lignes intactes.
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)
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;
La suggestion de @ AHiggins a bien fonctionné pour moi:
REPLACE(REPLACE(REPLACE(B.Address, CHAR(10), ' '), CHAR(13), ' '), CHAR(9), ' ')
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.
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.
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
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.
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.
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!
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.
nvarchar(max)
, déplacez-le au bas de la table.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) + '%'
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
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.
J'ai rencontré le même problème. J'ai pu obtenir mes résultats sur un CSV en utilisant la solution suivante:
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 ...
CR/LF retenu dans les données.
BONUS (les valeurs NULL ne sont pas copiées sous la forme 'NULL').