none
Problemas al realizar insert RRS feed

  • Pregunta

  • Esto nunca me habia pasado, pero siempre hay una primera vez.

    Tengo:

    Insert Into TEST

    Select descripcion From Tabla

    Error:

    Mens. 8152, Nivel 16, Estado 14, Línea 11
    String or binary data would be truncated.
    The statement has been terminated.

    Entonces reviso el campo de la tabla TEST y es varchar(50)

    hago un LEN de descripcion de tabla y el len mayor es 50 !!!!!!

    Tambien probe poniendo RTRIM y LTRIM y el error el mismo, pero fue como de prueba pues insisto que el LEN mayor es 50.


    DBA SQL Server Santiago/Chile

    lunes, 20 de junio de 2016 17:04

Respuestas

  • Saludos

    No estas intentando meter un varchar en un nvarchar? esto podria ser la razón del error que estas experimentando.

    • Marcado como respuesta José De Alva miércoles, 29 de junio de 2016 19:45
    lunes, 20 de junio de 2016 21:44
  • CMAPM,

    Intenta evaluar con la función DATALENGTH(), dicha función retorna el número de bytes que a diferencia de la función LENGTH() ésta última excluye los caracteres de espacio en blanco al final, es probable que ahí puedas encontrar la diferencia

    SELECT 
            LENGTH(Campo1),
            DATALENGTH(Campo1),
            CASE WHEN LENGTH(Campo1) <> DATALENGTH(Campo1) THEN 'WARNING' END
    FROM
           ...

    • Marcado como respuesta José De Alva miércoles, 29 de junio de 2016 19:46
    martes, 21 de junio de 2016 14:00
  • Saludos,

    Veo que Williams me gano, como el bien dice intenta usar data_lenght para medir el tamaño de los campos, en programación existe un paradigma que aunque creo que no se aplica en este momento si es cierto.

    No puedes vaciar un dato mayor en uno menor aunque el contenido sea posible que entre los sistemas lo que validan es el tamaño del contenedor a menos que exista un cast explicito.  

    • Marcado como respuesta José De Alva miércoles, 29 de junio de 2016 19:46
    martes, 21 de junio de 2016 14:30
  • El mensaje en ese sentido es claro, pero a fin de evitar inconvenientes realiza un len para garantizar que no soprepase la extension de 50, es decir algo como:

    Insert Into TEST
    Select SUBSTRING(descripcion,1,50) 
    From Tabla


    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    • Propuesto como respuesta Camilo A. Villa lunes, 20 de junio de 2016 21:32
    • Marcado como respuesta José De Alva miércoles, 29 de junio de 2016 19:45
    lunes, 20 de junio de 2016 19:11

Todas las respuestas

  • CMAPM,

    ¿Ambas columnas son del mismo tipo? es decir, nvarchar()/varchar(), te recomiendo que indiques explicitamente el nombre de las columnas sobre las que insertaras los valores.

    Puedes castear al mismo tipo de dato y longitud de la columna de la tabla a insertar:

    INSERT INTO TEST (Campo1) SELECT CONVERT(varchar(50), descripcion) FROM Tabla;

    lunes, 20 de junio de 2016 17:07
  • El mensaje en ese sentido es claro, pero a fin de evitar inconvenientes realiza un len para garantizar que no soprepase la extension de 50, es decir algo como:

    Insert Into TEST
    Select SUBSTRING(descripcion,1,50) 
    From Tabla


    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    • Propuesto como respuesta Camilo A. Villa lunes, 20 de junio de 2016 21:32
    • Marcado como respuesta José De Alva miércoles, 29 de junio de 2016 19:45
    lunes, 20 de junio de 2016 19:11
  • Saludos

    No estas intentando meter un varchar en un nvarchar? esto podria ser la razón del error que estas experimentando.

    • Marcado como respuesta José De Alva miércoles, 29 de junio de 2016 19:45
    lunes, 20 de junio de 2016 21:44
  • Hola.

    Ambas son varchar pero la de origen es de 60 y destino de 50, pero como había indicado:

    "hago un LEN de descripción de tabla y el len mayor es 50"                 


    Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
    Descripcion_Etapa_Venta varchar no 60 no no no SQL_Latin1_General_CP1_CI_AI


    Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
    descripcion_etapa_venta varchar no 50 no no no SQL_Latin1_General_CP1_CI_AI

    La subi a 60 y problema solucionado, pero me dejo intrigado el problema, pues no tenia ninguna fila mas ancha que 50.


    DBA SQL Server Santiago/Chile

    martes, 21 de junio de 2016 13:26
  • CMAPM,

    Intenta evaluar con la función DATALENGTH(), dicha función retorna el número de bytes que a diferencia de la función LENGTH() ésta última excluye los caracteres de espacio en blanco al final, es probable que ahí puedas encontrar la diferencia

    SELECT 
            LENGTH(Campo1),
            DATALENGTH(Campo1),
            CASE WHEN LENGTH(Campo1) <> DATALENGTH(Campo1) THEN 'WARNING' END
    FROM
           ...

    • Marcado como respuesta José De Alva miércoles, 29 de junio de 2016 19:46
    martes, 21 de junio de 2016 14:00
  • Saludos,

    Veo que Williams me gano, como el bien dice intenta usar data_lenght para medir el tamaño de los campos, en programación existe un paradigma que aunque creo que no se aplica en este momento si es cierto.

    No puedes vaciar un dato mayor en uno menor aunque el contenido sea posible que entre los sistemas lo que validan es el tamaño del contenedor a menos que exista un cast explicito.  

    • Marcado como respuesta José De Alva miércoles, 29 de junio de 2016 19:46
    martes, 21 de junio de 2016 14:30