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.6.5″ hover_enabled=”0″ text_text_color=”#000000″ sticky_enabled=”0″]Msg 8152, Level 16, State 30, Line 1
String or binary data would be truncated.
The statement has been terminated.
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″][/et_pb_text][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.6.5″ hover_enabled=”0″ text_text_color=”#000000″ sticky_enabled=”0″]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.
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″][/et_pb_text][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_column][/et_pb_row][/et_pb_section]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.