销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错

销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错,如: 数据保存失败,错误提示:**将截断字符串或二进制数据。语句已终止** 或报错:**String or binary data would be truncated.** ![截断报错示例.webp](/download/0100273c605286404ccfbc3e2692f2ccee4a.webp) 最常见的原因,是销售订单将通版备注字段或者自定义文本字段加长后,没有同步加长新变更单上的字段导致。 可以这样验证下:如果销售订单变更后,不做任何修改,只填变更原因,然后点保存,看看是否会报截断错,如果是,则基本为以上情况,可使用以下脚本进行巡检和修复(注意使用前提): ```sql /*-------使用前提:-------*/ --1、私有云客户,公有云遇到该报错,建议提单分析处理 --2、SQLSERVER数据库 --对比销售订单表头 DECLARE @NAME01 NVARCHAR(100) ,@NAME02 NVARCHAR(100) SET @NAME01 = 'T_SAL_ORDER' SET @NAME02 = 'T_SAL_XORDER' SELECT T1.TABLE_NAME 表名,T1.COLUMN_NAME 字段名,T1.DATA_TYPE 字段类型,T1.max_length 字段长度,T1.is_nullable 是否允许NULL值, '<<-销售订单----·----销售订单变更单->>' '<<-销售订单----·----销售订单变更单->>' , T2.TABLE_NAME 表名,T2.COLUMN_NAME 字段名,T2.DATA_TYPE 字段类型,T2.max_length 字段长度,T2.is_nullable 是否允许NULL值, 'ALTER TABLE ' + @NAME02 + ' ALTER COLUMN '+ T1.COLUMN_NAME + ' '+T1.DATA_TYPE+' ('+CONVERT(nvarchar(1000),T1.max_length/2) + ')'+ (CASE WHEN t1.is_nullable = 1 then '' when t1.is_nullable = 0 then ' NOT NULL' END) + ';' 建议语句 FROM ( ( SELECT A.NAME TABLE_NAME,B.NAME COLUMN_NAME,C.NAME DATA_TYPE,B.MAX_LENGTH ,B.is_nullable FROM SYS.ALL_OBJECTS A INNER JOIN SYS.ALL_COLUMNS B ON A.OBJECT_ID = B.OBJECT_ID INNER JOIN SYS.TYPES C ON B.SYSTEM_TYPE_ID = C.USER_TYPE_ID WHERE A.NAME = @NAME01 ) T1 LEFT JOIN ( SELECT A.NAME TABLE_NAME,B.NAME COLUMN_NAME,C.NAME DATA_TYPE,B.MAX_LENGTH,B.is_nullable FROM SYS.ALL_OBJECTS A INNER JOIN SYS.ALL_COLUMNS B ON A.OBJECT_ID = B.OBJECT_ID INNER JOIN SYS.TYPES C ON B.SYSTEM_TYPE_ID = C.USER_TYPE_ID WHERE A.NAME = @NAME02 ) T2 ON T1.COLUMN_NAME = T2.COLUMN_NAME ) WHERE T1.MAX_LENGTH <> T2.MAX_LENGTH AND T1.MAX_LENGTH > T2.MAX_LENGTH AND T1.max_length <>-1 --排除Nvarchar(max) AND T1.DATA_TYPE IN ('VARCHAR','NVARCHAR'); go --对比销售订单表体 DECLARE @NAME01 NVARCHAR(100) ,@NAME02 NVARCHAR(100) SET @NAME01 = 'T_SAL_ORDERENTRY' SET @NAME02 = 'T_SAL_XORDERENTRY' SELECT T1.TABLE_NAME 表名,T1.COLUMN_NAME 字段名,T1.DATA_TYPE 字段类型,T1.max_length 字段长度,T1.is_nullable 是否允许NULL值, '<<-销售订单----·----销售订单变更单->>' '<<-销售订单----·----销售订单变更单->>' , T2.TABLE_NAME 表名,T2.COLUMN_NAME 字段名,T2.DATA_TYPE 字段类型,T2.max_length 字段长度,T2.is_nullable 是否允许NULL值, 'ALTER TABLE ' + @NAME02 + ' ALTER COLUMN '+ T1.COLUMN_NAME + ' '+T1.DATA_TYPE+' ('+CONVERT(nvarchar(1000),T1.max_length/2) + ')'+ (CASE WHEN t1.is_nullable = 1 then '' when t1.is_nullable = 0 then ' NOT NULL' END) + ';' 建议语句 FROM ( ( SELECT A.NAME TABLE_NAME,B.NAME COLUMN_NAME,C.NAME DATA_TYPE,B.MAX_LENGTH ,B.is_nullable FROM SYS.ALL_OBJECTS A INNER JOIN SYS.ALL_COLUMNS B ON A.OBJECT_ID = B.OBJECT_ID INNER JOIN SYS.TYPES C ON B.SYSTEM_TYPE_ID = C.USER_TYPE_ID WHERE A.NAME = @NAME01 ) T1 LEFT JOIN ( SELECT A.NAME TABLE_NAME,B.NAME COLUMN_NAME,C.NAME DATA_TYPE,B.MAX_LENGTH,B.is_nullable FROM SYS.ALL_OBJECTS A INNER JOIN SYS.ALL_COLUMNS B ON A.OBJECT_ID = B.OBJECT_ID INNER JOIN SYS.TYPES C ON B.SYSTEM_TYPE_ID = C.USER_TYPE_ID WHERE A.NAME = @NAME02 ) T2 ON T1.COLUMN_NAME = T2.COLUMN_NAME ) WHERE T1.MAX_LENGTH <> T2.MAX_LENGTH AND T1.MAX_LENGTH > T2.MAX_LENGTH AND T1.max_length <>-1 --排除Nvarchar(max) AND T1.DATA_TYPE IN ('VARCHAR','NVARCHAR'); ``` 以上脚本在数据库执行后,如果发现有变更单长度不足的字段,会进行提示, 举一典型情况的例子说明下:我在订单上加了一个字段F_KYLE_TEXT,数据库长度为50,但后台修改增长至255,但是变更单上的该字段未改变,导致变更时保存报错,则执行该巡检SQL后,结果如下: ![演示修改.webp](/download/0100c7c674d8dbaa4d38998e7496aaa9fa3a.webp) 执行建议语句后,再尝试保存销售订单即可 其他情况备注:如果更新后无效,依然报错,可以检查几种情况: 1、原始的销售订单编号,长度是否超过了25位(所有字符个数,不区分中文英文符号),因为变更单默认的单据编号也是30位,变更后生成的变更单号默认规则为原始订单号+5位版本号(格式:XSDD000001_V001),基于该规则,拼接订单号后,会超出30位。 2、数据库中是否有二开人员自定义过Nvarchar(max)或者varchar(max)类型 如果属于以上两种特殊情况,或者其他未覆盖的情况,建议提单分析处理

厉害!!终于找到问题的根源了!谢谢



挺实用

销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错

销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错,如:数据保存失败,错误提示:**将截断字符串或二进制数据。语句已终止...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息