z315559822 2023-06-14 14:50 采纳率: 0%
浏览 22

sql 截断字符串或二进制数据问题处理

问题遇到的现象和发生背景

从192.168.1.9设备的MS-SQL数据库的多个表里面取出18个字段,INSERT INTO 到192.168.1.6设备的MS-SQL数据库的一个叫【接单登记表】的表里面。代码如下:

INSERT INTO 接单登记表(业务接单,首批需求,客户名称, 订单类别, 产品类别,产品名称,图号,项目编码,项目名称,楼栋号,制造单号,数量,材质,销售区域,工程负责人,销售金额,产值,备注1)
select 业务接单, 首批需求, 客户 as 客户名称, 订单类别, 饰面类型 as 产品类别, 产品名称,图号,项目编码,项目名称,楼栋号,销售单号 as 制造单号, sum(数量) as 数量,饰面名称 as 材质,销售类别 as 销售区域,项目负责人 as 工程负责人,sum(金额) as 销售金额, sum((金额*0.7 ))  as 产值,备注 as 备注1
from( 
SELECT dDate AS 业务接单,
dPreDate AS 首批需求,
cdefine32 AS 是否自制,
dep.cDepname AS 销售类别,
per.cPersonName AS 销售负责人,
cdefine1 AS 项目负责人,
a.cSOCode AS 销售单号,
CASE        
        WHEN LEFT ( a.cSOCode, 1 ) = 'A' THEN
        '零单' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'B' THEN
        '渠道' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'D' THEN
        '零单' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'G' THEN
        '工程' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'K' THEN
        '零单' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'Q' THEN
        '渠道' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'S' THEN
        '零单' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'X' THEN
        '零单' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'Y' THEN
        '样板房' 
        WHEN LEFT ( a.cSOCode, 1 ) = 'L' THEN
        '零单' ELSE '零单' 
    END AS 订单类别,----订单类别
    cCusName AS 客户,
    cdefine3 AS 项目编码,
    cDefine10 AS 项目名称,
    cDefine14 AS 楼栋号,
    cFree1 AS 饰面类型,---产品类别
    cFree2 AS 饰面名称,
    cInvCode AS 存货编码,
    cInvName AS 产品名称,
    cDefine28 AS 图号,
    iQuantity AS 数量,
    iSum AS 金额,
    cMaker AS 制单人,
    a.cMemo AS 备注,
    cSysBarCode AS 订单条码,
    cmodifier AS 更新人,
    dmodifysystime AS 更新时间,
CASE    
        WHEN a.iverifystate = 0 THEN
        '未提交' 
        WHEN a.iverifystate = 1 THEN
        '审核中' 
        WHEN a.iverifystate = 2 THEN
        '已审核' ELSE '' 
    END AS 审核状态 --0 未提交 1 审核中 2 已审核
--a.iverifystate as 审核状态 --0 未提交 1 审核中 2 已审核    
FROM srv_lnk.UFDATA_001_2020.dbo.SO_SOMAIN a
    INNER JOIN srv_lnk.UFDATA_001_2020.dbo.SO_SODetails b ON a.csocode= b.csocode
    INNER JOIN srv_lnk.UFDATA_001_2020.dbo.SO_SODetails_extradefine c ON b.iSOsID = c.iSOsID
    LEFT JOIN srv_lnk.UFDATA_001_2020.dbo.Department dep ON a.cDepCode = dep.cDepCode
    LEFT JOIN srv_lnk.UFDATA_001_2020.dbo.person per ON a.cPersonCode = per.cPersonCode 
WHERE
    ddate  >= DateAdd(d,-7,getdate()) and a.cSOCode not in(select distinct 制造单号 from 接单登记表 where 业务接单 >= DateAdd(d,-7,getdate()))
    AND cChildCode IS NULL 
)销售订单
GROUP BY 业务接单,首批需求,客户, 订单类别, 饰面类型 , 产品名称,图号,项目编码,项目名称,楼栋号,销售单号,饰面名称,销售类别 ,项目负责人,备注
order by 业务接单 desc,销售单号,楼栋号,图号

出现如下报错消息:

Msg 8152, Level 16, State 13, Server FILESSERVER, Procedure , Line 0
将截断字符串或二进制数据。
语句已终止。
[22001] [Microsoft][SQL Server Native Client 10.0][SQL Server]将截断字符串或二进制数据。 (8152)
[01000] [Microsoft][SQL Server Native Client 10.0][SQL Server]语句已终止。 (3621)

操作环境、软件版本等信息

windowserver2016,mssql2019

尝试过的解决方法

因为【接单登记表】是前期已经存在历史数据的独立建的表,里面存在字段属性和长度不一致情况,导致报错,不打算修改【接单登记表】字段属性,尝试容错的方式处理。在代码查询分析器里面的,sql语句开始和结束位置,配置上容错代码,没有达到预期效果。

set ANSI_NULLS off
set ansi_warnings off
我想要达到的结果

不在报错,INSERT INTO【接单登记表】对应的字段数据。

  • 写回答

2条回答 默认 最新

  • AllenGd 大数据领域优质创作者 2023-06-14 15:15
    关注

    在插入数据之前,对数据进行处理,将长度超过字段长度的数据截断或者转换为其他类型的数据

    评论

报告相同问题?

问题事件

  • 创建了问题 6月14日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度