with round foreign example drop sql-server truncation

round - Truncamiento de SQL Server y limitación 8192



truncate oracle (10)

¿Has probado esta solución simple? ¡A solo 2 clics de distancia!

En la ventana de consulta,

  1. establece las opciones de consulta en "Resultados a la cuadrícula", ejecuta tu consulta
  2. Haga clic derecho en la pestaña de resultados en la esquina de la cuadrícula, guarde los resultados como cualquier archivo

¡Obtendrá todo el texto que desea ver en el archivo! Puedo ver 130,556 caracteres para mi resultado de un campo varchar (MAX)

En SQL Server 2005 estoy tratando de consultar una columna varchar (MAX) que tiene algunas filas con datos de texto que exceden el 8192. Sin embargo, en Management Studio tengo en Herramientas -> Opciones -> Resultados de la consulta -> Resultados a Texto -> Números máximos de caracteres que se muestran en cada columna = 8192 , que es un máximo. De acuerdo con esto, parece que el truncamiento en estas filas ocurre solo debido a la limitación impuesta por la salida de texto.

Lo único que veo para evitar esto es usar una función SUBSTRING para tomar los primeros 8000 caracteres, luego los 8000 caracteres siguientes, etc. etc. Pero esto es feo y propenso a errores.

Debo mencionar que SSIS y BCP no son opciones para mí.

¿Alguien tiene una mejor sugerencia? ¡Gracias!


Corrí hacia esto tratando de exportar XML. Esta es la solución que utilicé:

Seleccione la opción Resultado en cuadrícula, haga clic con el botón derecho en el enlace que aparece en el panel Resultados, luego seleccione Guardar resultados como, elija el tipo de archivo Todos los archivos, asigne un nombre al archivo y haga clic en Guardar. Todos los datos xml se guardan correctamente en un archivo.

Estoy usando SSMS 10, y no puedo hacer que la solución de Torre funcione. El asistente de exportación siguió pensando que la columna de entrada era una imagen:

El tipo de datos para "columna de entrada" XML_F52E2B61-18A1-11d1-B105-00805F49916B "(26)" es DT_IMAGE


El truncamiento del que está hablando solo ocurre en Management Studio. Si tira de la columna a otra aplicación, no se truncará.

No hay forma de que estés usando el Analizador de consultas para hablar con SQL Server 2005. ¿Te refieres a Management Studio?


En SSMS, si selecciona datos de una fila, se limita a una pequeña cantidad de caracteres, pero si edita datos de una fila, el valor completo estará allí. Puede que no siempre esté allí, pero si ctrl-a, ctrl-c luego lo pasa en un editor, todo estará allí.


Mi solución fue un poco redonda pero me consiguió allí (siempre que la salida sea menos de 65535 caracteres) :

  1. En SQL Management Studio, establezca el límite para los resultados de la grilla en 65535 (Herramientas> Opciones> Resultados de la consulta> Servidor SQL> Resultados en cuadrícula> Datos no XML)
  2. Ejecuta la consulta, salida a la grilla
  3. Haga clic con el botón derecho en los resultados, elija "Guardar resultados como ..." y guarde los resultados en un archivo
  4. Abra el archivo en el bloc de notas o similar para obtener la salida

ACTUALIZACIÓN : Para demostrar que esto funciona, aquí hay un SQL que selecciona una sola columna de 100.000 caracteres. Si guardo el resultado de la grilla en un archivo csv, todos los 100,000 caracteres están sin truncamiento.

DECLARE @test nvarchar(MAX), @i int, @line nvarchar(100) SET @test = ''''; SET @i = 100 WHILE @i < 100000 BEGIN SET @test = @test + STUFF(REPLICATE(''_'', 98) + CHAR(13) + CHAR(10), 1, LEN(CAST(@i AS nvarchar)), CAST(@i AS nvarchar)) SET @i = @i + 100 END SELECT @test

Notas:

  1. No parece hacer ninguna diferencia cuál es la configuración de la duración del personaje, como originalmente pensé.
  2. Estoy usando SQL 2008 R2 (tanto el servidor como Management Studio)
  3. No parece hacer una diferencia si la columna larga se almacena en una variable local (como en este ejemplo), o se selecciona de una tabla real

Otra solución alternativa es usar HeidiSql para estas preguntas complicadas. No tiene los límites en la longitud del campo.


Puede exportar los datos a un archivo plano que no se truncará. Para hacer esto:

  1. Haga clic derecho en la base de datos
  2. Haga clic en Tareas -> Exportar datos
  3. Seleccione su fuente de datos (los valores predeterminados deberían estar bien)
  4. Elija "Destino de archivo plano" para el tipo de Destino.
  5. Elija un nombre de archivo para la salida.
  6. En "Especificar copia o consulta de tabla", elija "Escribir una consulta para especificar los datos a transferir"
  7. Pegue en su consulta

Los pasos restantes deben ser auto explicativos. Esto generará el archivo en texto y puede abrirlo en su editor de texto favorito.


Si tuviera una opción, la consulta devolvería los datos como "Para XML Auto" o "Para XML en bruto" o "Para XML explícito" de esa manera las limitaciones son mucho más altas y puede hacer mucho más con los resultados superados.


También uso XML pero un método ligeramente diferente que soluciona la mayoría de los problemas relacionados con la creación de XML.

declare @VeryLongText nvarchar(max) = ''''; SELECT top 100 @VeryLongText = @VeryLongText + '' '' + OBJECT_DEFINITION(object_id) FROM sys.all_objects WHERE type=''P'' and is_ms_shipped=1 SELECT LEN(@VeryLongText) SELECT @VeryLongText AS [processing-instruction(x)] FOR XML PATH('''') PRINT @VeryLongText /*WILL be truncated*/

Asegúrese de que el límite de "datos XML" en SSMS sea lo suficientemente alto.


Usualmente uso XML para obtener una gran cadena de depuración como salida (usando el arnés de prueba de Luke):

declare @test nvarchar(max), @i int, @line nvarchar(100) set @test = ''''; set @i = 100 while @i < 100000 begin set @test = @test + stuff(replicate(''_'', 98) + char(13) + char(10), 1, len(cast(@i as nvarchar)), cast(@i as nvarchar)) set @i = @i + 100 end -- ctrl+d for "results to grid" then click the xml output --select cast(''<root>'' + @test + ''</root>'' as xml) -- revised select @test for xml path(''''), type;