tabla - Nuevo problema de línea al copiar datos de SQL Server 2012 a Excel
pegar datos de excel a sql server (18)
Recientemente me actualicé a SQL2012 y estoy usando Management Studio. Una de mis columnas en la base de datos tiene un CHAR(13) + CHAR(10)
almacenado en ella.
Cuando estaba usando SQL Server 2008, esto se copiaba y pegaba completamente bien en Excel. Ahora, sin embargo, copiar y pegar los mismos datos crea una nueva línea / retorno de carro en los datos que tengo en Excel.
¿Hay alguna configuración que omití en SQL2012 que resolverá este problema? No quiero simplemente REPLACE(CHAR(13) + CHAR(10))
en cada selección de base de datos, ya que tendría que pasar de SELECT *
a definir cada columna individual.
Cambiar todas mis consultas porque Studio modificó la versión no es una opción. Intenté las preferencias mencionadas anteriormente sin ningún efecto. No puso las comillas cuando había un CR-LF. Tal vez solo se dispara cuando ocurre una coma.
Copiar y pegar en Excel es uno de los pilares del servidor SQL. Mircosoft necesita una casilla de verificación para volver al comportamiento de 2008 o necesitan mejorar la transferencia del portapapeles a Excel de modo que UNA FILA ES IGUAL A UNA FILA.
Como muchas veces tengo que copiar datos de SQL para sobresalir, he creado una función para tratar con la nueva línea y también con los caracteres de las pestañas (que hacen cambios en las columnas después de pegarlas en 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
Ejemplo de uso:
SELECT dbo.XLS(Description) FROM Server_Inventory
En lugar de copiar y pegar en Excel, podrías exportar a Excel. Haga clic derecho en la base de datos -> Tareas -> Exportar datos ...
- Fuente: SQL Server Native Client
- Destino: Excel
- Especifique Table Copy o Query: elija la consulta e ingrese su consulta
CR / LF retenido en los datos.
BONUS (los nulos no se copian como ''NULL'').
Encontré una solución para el problema; en lugar de copiar y pegar a mano, use Excel para conectarse a su base de datos e importar la tabla completa. A continuación, elimine los datos que no le interesan.
Estos son los pasos (para Excel 2010)
- Vaya al menú
Data > Get external data: From other sources > From SQL Server
- Escriba el nombre del servidor SQL (y las credenciales si no tiene la autenticación de Windows en su servidor) y conéctese.
- Seleccione la base de datos y la tabla que contiene los datos con las nuevas líneas y haga clic en ''Finalizar''.
- Seleccione la hoja de trabajo de destino y haga clic en ''Aceptar''.
Excel ahora importará la tabla completa con las líneas nuevas intactas.
Esto a veces ocurre con Excel cuando recientemente usó "Texto en columnas".
Intente salir de Excel, volver a abrir y pegar de nuevo. Eso generalmente funciona para mí, pero he escuchado que a veces tienes que reiniciar tu computadora por completo.
Esto se soluciona agregando una nueva opción Retener CR / LF en la copia o guardar en el menú Herramientas -> Opciones ... , Resultados de la consulta -> Servidor SQL -> Resultados en la cuadrícula .
Necesita abrir una nueva sesión (ventana) para que el cambio tome un lugar.
El valor predeterminado es no seleccionado (falso), lo que significa que copiar / guardar desde la cuadrícula copiará el texto tal como se muestra (con CR / LF reemplazado por espacios). Si se establece en verdadero, el texto se copiará / guardará de la cuadrícula, ya que en realidad se almacena, sin la sustitución de caracteres.
En caso de que la gente no haya seguido la cadena de elementos de conexión (que lleva a https://connect.microsoft.com/SQLServer/feedback/details/735714 ), este problema se ha resuelto en la versión de vista previa de SSMS.
Puede descargar esto gratis desde https://msdn.microsoft.com/library/mt238290.aspx , es una descarga independiente, por lo que ya no necesita los medios SQL completos.
(Nota: la página en https://msdn.microsoft.com/library/ms190078.aspx actualmente no se actualiza con esta información. Estoy dando seguimiento a esto, así que debería reflejar la nueva opción pronto)
La mejor forma en que he llegado a incluir los retornos de carro / saltos de línea en el resultado (Copiar / Copiar con encabezados / Guardar resultados como) para copiar en Excel es agregar las comillas dobles en SELECT
, por ejemplo:
SELECT ''"'' + ColumnName + ''"'' AS ColumnName FROM TableName;
Si los datos de la columna en sí pueden contener comillas dobles, se pueden escapar mediante "comillas dobles-dobles":
SELECT ''"'' + REPLACE(ColumnName, ''"'', ''""'') + ''"'' AS ColumnName FROM TableName;
Los datos de la columna vacía aparecerán como solo 2 comillas dobles en SQL Management Studio, pero al copiar en Excel se obtendrá una celda vacía. Se mantendrán los valores NULL
, pero eso se puede cambiar utilizando CONCAT(''"'', ColumnName, ''"'')
o COALESCE(ColumnName, '''')
.
Como comentó @JohnLBevan, los datos de la columna de escape también se pueden hacer usando la función QUOTENAME
:
SELECT QUOTENAME(ColumnName, ''"'') AS ColumnName FROM TableName;
La siguiente "solución alternativa" conserva el CRLF y admite pegar datos con caracteres CRLF en Excel sin dividir los datos de columna en varias líneas. Se requerirá reemplazar "select *" con columnas con nombre y cualquier comilla doble en los datos será reemplazada con el valor del delimitador.
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
La sugerencia de @ AHiggins funcionó bien para mí:
REPLACE(REPLACE(REPLACE(B.Address, CHAR(10), '' ''), CHAR(13), '' ''), CHAR(9), '' '')
Me encontré con el mismo problema. Pude obtener mis resultados en un archivo CSV con la siguiente solución:
- Ejecutar la solicitud
- Haga clic con el botón derecho en la esquina superior izquierda de la cuadrícula de resultados
- Seleccione "Guardar resultados como ..."
- ¡Elija csv y viola!
Mi mejor suposición es que esto no es un error, sino una característica de Sql 2012. ;-) En otros contextos, te complacería retener tus cr-lf''s, como cuando copias una gran parte del texto. Es solo que no funciona bien en tu situación.
Siempre puedes quitarlos en tu selección. Esto haría su consulta según lo que pretende en ambas versiones:
select REPLACE(col, CHAR(13) + CHAR(10), '', '') from table
Para poder copiar y pegar resultados de SQL Server Management Studio 2012 a Excel o exportar a Csv con separadores de lista, primero debe cambiar la opción de consulta.
- Haga clic en Opciones de consulta y luego.
- En Resultados, haga clic en la Grilla.
Marque la casilla al lado de:
Cita cadenas que contienen separadores de lista al guardar resultados .csv.
Esto deberia resolver el problema.
Podría intentar guardar los resultados de la consulta como Excel, cambiar la extensión del archivo a .txt. Abra usando Excel (abrir con ...) luego use texto en columnas (formateando como texto). No estoy seguro de si esto funcionará para esta situación, pero funciona bien para otros problemas de formato que sobresalen automáticamente.
Una solución menos que ideal es usar la GUI 2008 contra la base de datos de 2012 para copiar los resultados de la consulta. Algunas funciones como "tabla de scripts como CREAR" no funcionan, pero puede ejecutar consultas y copiar pegar los resultados en Excel, etc. desde una base de datos de 2012 sin problemas.
¡Microsoft necesita arreglar esto!
Una vez que los datos se exportan a sobresalir, resalte la columna de fecha y el formato para adaptarlos a sus necesidades o use el campo personalizado. ¡Trabajó para mí como un encanto!
Viendo que esto ya no se menciona aquí y así fue como resolví el problema ...
Haga clic con el botón derecho en la base de datos de destino y elija Tasks > Export data
y siga con esto. Uno de los destinos en la pantalla ''Elegir un destino'' es Microsoft Excel y hay un paso que aceptará su consulta.
Es el asistente de importación y exportación de SQL Server. Es mucho más prolijo que la simple opción de Copiar con encabezados que uso normalmente, pero, salvo saltando por muchos aros más, cuando tienes muchos datos para entrar en Excel, es una opción que vale la pena.
usted realmente podría descubrir qué filas / datos tienen devoluciones de carro y arreglar los datos de origen ... en lugar de simplemente ponerle una cinta adhesiva.
Tabla de ACTUALIZACIÓN Establecer Campo = Reemplazar (Reemplazar (Campo, CHAR (10), ''''), CHAR (13), '''') DONDE Campo como ''%'' + CHAR (10) + ''%'' o Campo como ''%'' + CHAR (13) + ''%''
- Si su tabla contiene un campo
nvarchar(max)
mueva ese campo al final de su tabla. - En el caso de que el tipo de campo sea diferente a nvarchar (max), identifique el campo o campos ofensivos y use esta misma técnica.
- Guárdalo.
- Vuelva a seleccionar la tabla en SQL.
- Si no puede guardar sin un cambio, puede cambiar temporalmente las advertencias relevantes en HERRAMIENTAS | OPCIONES . Este método no conlleva ningún riesgo.
- Copie y pegue la pantalla de SQL GRID con Headers to Excel.
- Los datos aún pueden exhibir un retorno de carro, pero al menos sus datos están todos en la misma fila.
- Luego, seleccione todos los registros de filas y realice una ordenación personalizada en la columna ID.
- Todos sus registros deberían estar intactos y consecutivos.