SQL Server
997
0

Mejorar los errores Data Truncation en SQL Server

[et_pb_section fb_built=”1″ admin_label=”section” _builder_version=”3.22″ min_height=”1929px” custom_margin=”||-43px|||”][et_pb_row admin_label=”row” _builder_version=”3.25″ background_size=”initial” background_position=”top_left” background_repeat=”repeat” custom_padding=”0px|||||”][et_pb_column type=”4_4″ _builder_version=”3.25″ custom_padding=”|||” custom_padding__hover=”|||”][et_pb_text admin_label=”Text” _builder_version=”4.6.5″ background_size=”initial” background_position=”top_left” background_repeat=”repeat” hover_enabled=”0″ text_text_color=”#000000″ sticky_enabled=”0″]Los errores de truncamiento de datos es algo que alguna vez como programadores de SQL Server nos hemos topado.
cuando hablamos de estos errores nos referimos a por ejemplo querer insertar en un VARCHAR(10) la palabra ‘TRIGGERDB CONSULTING SRL‘ lo cual como es lógico nos dará un error.

Ahora bien , este error no es muy detallado que digamos, por ende vamos a ver como podemos trabajar con lo que se denomina “Silent Truncation”

Veamos el siguiente ejemplo:
[/et_pb_text][et_pb_dmb_code_snippet code=”VVNFIE1BU1RFUgpHTwpEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBUUklHR0VSREIyMDE5CkNSRUFURSBEQVRBQkFTRSBUUklHR0VSREIyMDE5CkdPCgpVU0UgVFJJR0dFUkRCMjAxOQpHTwpEUk9QIFRBQkxFIElGIEVYSVNUUyBEQk8uREVNT19UUlVOQ0FURTsKCkNSRUFURSBUQUJMRSBEQk8uREVNT19UUlVOQ0FURQooSUQgSU5UIElERU5USVRZIFBSSU1BUlkgS0VZLAogQzEgVkFSQ0hBUiAoMTApKTsKCklOU0VSVCBJTlRPIERCTy5ERU1PX1RSVU5DQVRFIChDMSkKVkFMVUVTICgnVFJJR0dFUkRCIENPTlNVTFRJTkcgU1JMJyk=” _builder_version=”4.0.9″]VVNFIE1BU1RFUgpHTwpEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBUUklHR0VSREIyMDE5CkNSRUFURSBEQVRBQkFTRSBUUklHR0VSREIyMDE5CkdPCgpVU0UgVFJJR0dFUkRCMjAxOQpHTwpEUk9QIFRBQkxFIElGIEVYSVNUUyBEQk8uREVNT19UUlVOQ0FURTsKCkNSRUFURSBUQUJMRSBEQk8uREVNT19UUlVOQ0FURQooSUQgSU5UIElERU5USVRZIFBSSU1BUlkgS0VZLAogQzEgVkFSQ0hBUiAoMTApKTsKCklOU0VSVCBJTlRPIERCTy5ERU1PX1RSVU5DQVRFIChDMSkKVkFMVUVTICgnVFJJR0dFUkRCIENPTlNVTFRJTkcgU1JMJyk=[/et_pb_dmb_code_snippet][et_pb_text _builder_version=”4.6.5″ custom_padding=”||0px|||” hover_enabled=”0″ text_text_color=”#000000″ sticky_enabled=”0″]Al ejecutar nuestra operación INSERT observamos el siguiente error

[/et_pb_text][et_pb_text _builder_version=”4.0.9″]

Msg 8152, Level 16, State 30, Line 16
Los datos de cadena o binarios se truncarían.
Se terminó la instrucción.

[/et_pb_text][et_pb_text _builder_version=”4.0.9″]

Msg 8152, Level 16, State 30, Line 1
String or binary data would be truncated.
The statement has been terminated.

[/et_pb_text][et_pb_text _builder_version=”4.6.5″ hover_enabled=”0″ text_text_color=”#000000″ sticky_enabled=”0″]

SQL Server 2019 

En SQL Server 2019 usando solamente el modo de compatibilidad 150 podremos tener un mejor mensaje de error.

[/et_pb_text][et_pb_dmb_code_snippet code=”QUxURVIgREFUQUJBU0UgVFJJR0dFUkRCMjAxOSAKU0VUIENPTVBBVElCSUxJVFlfTEVWRUwgPSAxNTAKCklOU0VSVCBJTlRPIERCTy5ERU1PX1RSVU5DQVRFIChDMSkKVkFMVUVTICgnVFJJR0dFUkRCIENPTlNVTFRJTkcgU1JMJyk=” language=”sql” _builder_version=”4.0.9″]QUxURVIgREFUQUJBU0UgVFJJR0dFUkRCMjAxOSAKU0VUIENPTVBBVElCSUxJVFlfTEVWRUwgPSAxNTAKCklOU0VSVCBJTlRPIERCTy5ERU1PX1RSVU5DQVRFIChDMSkKVkFMVUVTICgnVFJJR0dFUkRCIENPTlNVTFRJTkcgU1JMJyk=[/et_pb_dmb_code_snippet][et_pb_text _builder_version=”4.0.9″]

Msg 2628, Level 16, State 1, Line 16
Los datos binarios o de la cadena se truncan en la columna “C1” de la tabla “TRIGGERDB2019.dbo.DEMO_TRUNCATE”. Valor truncado: “TRIGGERDB “.
Se terminó la instrucción.

[/et_pb_text][et_pb_text _builder_version=”4.0.9″]

Msg 2628, Level 16, State 1, Line 7
String or binary data would be truncated in table ‘TRIGGERDB2019.dbo.DEMO_TRUNCATE’, column ‘C1’. Truncated value: ‘TRIGGERDB ‘.
The statement has been terminated.

[/et_pb_text][et_pb_text _builder_version=”4.6.5″ hover_enabled=”0″ text_text_color=”#000000″ sticky_enabled=”0″]

SQL Server 2016 y 2017 

Si se quiere usar esta funcionalidad en SQL Server 2016 o 2017 se requiere activar el Trace Flag 460 el cual esta disponible en el Sp2 de SQL Server 2016 y CU6 de 2017  

[/et_pb_text][et_pb_dmb_code_snippet title=”TF 460 en el scope” code=”REJDQyBUUkFDRU9OICg0NjApCgpJTlNFUlQgSU5UTyBEQk8uREVNT19UUlVOQ0FURSAoQzEpClZBTFVFUyAoJ1RSSUdHRVJEQiBDT05TVUxUSU5HIFNSTCcpCg==” language=”sql” _builder_version=”4.0.9″]REJDQyBUUkFDRU9OICg0NjApCgpJTlNFUlQgSU5UTyBEQk8uREVNT19UUlVOQ0FURSAoQzEpClZBTFVFUyAoJ1RSSUdHRVJEQiBDT05TVUxUSU5HIFNSTCcpCg==[/et_pb_dmb_code_snippet][et_pb_text _builder_version=”4.0.9″]

Msg 2628, Level 16, State 1, Line 16
Los datos binarios o de la cadena se truncan en la columna “C1” de la tabla “TRIGGERDB2019.dbo.DEMO_TRUNCATE”. Valor truncado: “TRIGGERDB “.
Se terminó la instrucción.

[/et_pb_text][et_pb_text _builder_version=”4.0.9″]

Msg 2628, Level 16, State 1, Line 7
String or binary data would be truncated in table ‘TRIGGERDB2019.dbo.DEMO_TRUNCATE’, column ‘C1’. Truncated value: ‘TRIGGERDB ‘.
The statement has been terminated.

[/et_pb_text][/et_pb_column][/et_pb_row][/et_pb_section]
Tags: sql, sql 2019, SQL Server
You must be logged in to post a comment.