2012-07-19 14 views
9

Recientemente he encontrado un error al trabajar con bcp. Aquí está el error.bcp: Error = [Microsoft] [SQL Server Native Client 10.0] Datos de cadena, truncamiento a la derecha

Sqlstate = 22001 NativeError = 0 Error = [Microsoft] [ 10.0 de SQL Server Native Client] datos de cadena, truncamiento derecho

Estoy tratando de descomprimir los datos en una tabla de ensayo, que no tiene ninguna restricción y los tipos de datos también son bastante grandes en comparación con los datos. Tengo aproximadamente 11 archivos de diferentes tablas que se han bcp'd y se han eliminado de un solo archivo al desempacar los errores. Este es el comando que he estado usando con éxito. Muy recientemente (cuando intento hacer una copia del WH actual y configurar el proceso) he estado enfrentando problemas.

bcp.exe employee_details en employee_details.dat -n -E -S "servidor" U sa -P "contraseña"

He intentado cambiar los comandos a -C -T - S que funcionó cuando di el formato de forma manual. Este es un paquete muy grande e importante que necesito cargar en mi WH.
No sé si veo un archivo de formato aquí o no. Se necesita ayuda.

Gracias

Cinnamon girl.

+0

¿Puede ser mucho más específico, por favor? ¿Qué significa "bastante grande"? ¿Puedes mostrar la CREACIÓN DE LA TABLA real para la definición de la tabla y algunas muestras de líneas más largas del archivo? –

+0

Bueno Aaron, disculpa por no ser lo suficientemente claro. Mi archivo puede estar entre aproximadamente 1000 KB a 800,000KB dependiendo del tráfico o la hora punta. Mi tabla tiene columnas de muestra como epoch_time (bigint), server_id (varchar), uid_rl (int), apl (int) que son columnas de identidad y algunas otras columnas que se distribuyen entre int y float. Gracias chica de canela –

+0

No estoy pidiendo ver todo el archivo, o cosas vagas como 'varchar' -' varchar (what) '? ¿Cómo se ve la entrada? Nos está dando un mensaje de error impreciso que indica que está intentando rellenar al menos un valor que es demasiado grande para su columna, pero ¿no nos dirá las definiciones de la tabla o nos mostrará los datos que la causan? ¿Cómo espera que nosotros ayudemos? ¿Quizás podría imprimir su archivo, ponerlo en un tablero de dardos, lanzarle un dardo y le mostrará el valor que está causando el problema? Eso es lo que nos estás pidiendo que hagamos por ti. –

Respuesta

2

bcp error de truncamiento correcto cuando hay demasiados datos que se pueden ajustar en una sola columna. Esto puede deberse a archivos de formato incorrectos (si se usan) o al delimitador. El terminador de línea (Windows tiene CRLF o '\ r \ n' y UNIX tiene '\ n') también puede causar este error. Ejemplo Su archivo de formato contiene Windows CRLF, es decir, '\ r \ n' como el terminador de fila, pero el archivo contiene '\ n' como terminaciones de línea. Esto significaría ajustar todo el archivo en 1 fila (en lugar de 1 columna) lo que lleva a un error de truncamiento a la derecha.

+0

Realmente no entiendo su análisis. Sin embargo, +1 para la mención de alimentación de línea. Para mi caso, teníamos caracteres de alimentación de línea en los datos, que a BCP realmente no le gusta. – Richard

3

Para nosotros resultó que el archivo que estábamos tratando de cargar estaba en Unicode en lugar del formato ANSI.

Hay un modificador -N, pero nuestras tablas no tienen ningún dato de NVARCHAR.

solo guardamos el archivo en formato ANSI y funcionó, pero si tiene datos NVARCHAR o puede que tenga que utilizar la opción -N

Ver TechNet - Using Unicode Native Format to Import or Export Data

+0

¡Bueno! Logré importar usando el archivo csv guardado como ANSI ... sin embargo, aún obtengo algunos errores de truncamiento en algún punto del archivo ... tampoco puedo eliminar la encapsulación de doble cita mientras uso BCP .... alguna idea? –

+0

@PauloHenrique Lo siento, no tengo una solución. Posiblemente puedas cambiar el delimitador y luego manejar el campo en una tabla de etapas. Últimamente, recién he estado cargando los datos en un .NET DataSet y luego pasándolo como Tipo de tabla definida por el usuario a un proceso almacenado, pero eso no se presta a mucha flexibilidad. También termino secuenciando el nombre del tipo cuando el tipo cambia. Es más complicado pero más fácil de solucionar. Para cosas ad hoc simplemente hago una cadena XML y luego la analizo en un proceso almacenado, pero a veces es difícil resolver problemas si hay mucha transformación de datos. –

0

Abrir los archivos en Notepad ++. Vaya a la pestaña Vista-> mostrar símbolos-> mostrar todos los caracteres. También estaba enfrentando el mismo problema en los archivos .tsv. Una pestaña se extravió.

12

También enfrentamos el mismo problema al hacer BCP y resultó ser un problema con el nuevo carácter de línea en el archivo .dat.

Vea el archivo en Notepad ++ y haga clic en "Mostrar todos los caracteres" para ver el nuevo carácter de línea.

File with LineFeed character

BCP lanza siguiente error con -r "\ r \ n" opción es decircon la continuación de comandos

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\r\n" -S "DBServerName" -T -E 

"SQLSTATE = 22001 NativeError = 0 Error = [Microsoft] [ 10.0 de SQL Server Native Client] datos de cadena, truncamiento derecho"

BCP tratar a todas las filas de archivo como una sola fila con la opción -r -r "\ r", es decir, con la continuación de comando "\ n" o se resolvió

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\n" -S "DBServerName" -T -E 

problema cuando se utilizó t valor que Haxadecimal (0x0A) para el carácter nueva línea de comando BCP

bcp dbo.Test in C:\Test.dat -c -t "|" -r "0x0a" -S "DBServerName" -T -E 
+0

Mi csv se crea en Linux/PHP y tiene "LF" como return char, y usando '-r" 0x0a "' ¡funcionó para mí! –

+0

Es bueno saber que te ayudó ... ¡¡¡¡¡¡¡¡¡¡¡!!! –

+0

@MayankJha Mi archivo no se estaba cargando incluso con el carácter EOL de UNIX, pero funcionaba con un valor hexadecimal para el carácter de línea nueva: brillante – Ali

0

Sé que esto es viejo - pero me encontré con un caso en el que estaba recibiendo este error, resulta que uno de mis campos numéricos tenido más decimales permitidos por el esquema.

2

También recibí el mensaje de truncamiento. Después de horas buscando foros y probando soluciones sugeridas finalmente conseguí que mi carga funcionara.

El motivo del mensaje de truncamiento fue porque era lo suficientemente crédulo como para pensar que realmente importaba poner el nombre de la columna en el archivo de formato. Es el número anterior que parece dictar dónde se cargan los datos.

Mi archivo de entrada no tenía datos para la tercera columna de la tabla. Así que así es como se veía mi archivo de formato.

... "," 1 Cust_Name  SQL_Latin1... 
... "," 2 Cust_Ref  SQL_Latin1... 
... "," 3 Cust_Amount  SQL_Latin1... 
... "\r\n" 4 Cust_notes SQL_Latin1... 

Mi archivo de entrada se veía así:

Jones,ABC123,200.67,New phone 
Smith,XYZ564,10.23,New SIM 

La mesa parecía

Cust_Name Varchar(20) 
Cust_Ref Varchar(10) 
Cust_Type Varchar(3) 
Cust_amount Decimal(10,2) 
Cust_Notes Varchar (50) 
Cust_Tel Varchar(15) 
Cust...... 

Había asumido que al dar el nombre de columna en el archivo de formato que los datos irían en la columna apropiada en la mesa.

Sin embargo, esto funciona como el número de columna es importante y el nombre de columna es ruido.

... "," 1 A  SQL_Latin1... 
... "," 2 B  SQL_Latin1... 
... "," 4 C  SQL_Latin1... 
... "\r\n" 5 D  SQL_Latin1... 
Cuestiones relacionadas