销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错
销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错,如:
数据保存失败,错误提示:**将截断字符串或二进制数据。语句已终止**
或报错:**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)类型
如果属于以上两种特殊情况,或者其他未覆盖的情况,建议提单分析处理
销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错
销售订单 通过 销售订单新变更单变更时 保存报错,提示截断报错,如:数据保存失败,错误提示:**将截断字符串或二进制数据。语句已终止...
点击下载文档
本文2024-09-23 02:46:40发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-154638.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章