`

sql server报错:将截断字符串或二进制数据

阅读更多

 

摘自:http://www.cnblogs.com/Sandheart/archive/2005/01/11/89996.html

 

运行一个SQL的时候:报错:将截断字符串或二进制数据

 

 

出现这种Exception,一般是由于数据类型长度造成的,例如:
数据库定义Field A varchar(50);
但在程序中定义对应Field varchar(100),并填满;
操作就会报错.

 

看来以上提示,自己再次检查函数:

 

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

 

 

 

 

 

 

 

 


--use chic
--select * from billstatus_tab
--select * from SigerBill
--select * from bill_tab
--select * from TrackBill
--go
--sp_helptext GetPostBillList
--GO
ALTER              FUNCTION GetAccAch(@TrackNetNO varchar(50)) 
RETURNS @GetAccAch TABLE 

        [SaleNo] [varchar] (20) NULL, 
        [SaleDate] [datetime] NULL,  
        [AccountNo] [varchar] (20) NULL, 
        [AccountExec] [varchar] (30) NULL,
        [headship] [varchar] (20) NULL,--职务
        [EP_Rank] [varchar] (20) NULL, --级别
        [PostNetNO] [varchar] (20) NULL, 
        [PostNet] [varchar] (30) NULL, 
        [CustNo] [varchar] (50) NULL, 
        [CustName] [varchar] (50) NULL, 
        [CustType] [varchar] (20) NULL, 
        [FeeType] [varchar] (20) NULL,         
        [Fee] [decimal](18, 2) NULL ,
        [WeightRate] float,
        [AchRateFee] [decimal](18, 2) NULL ,
 [Inputer] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
 [InputNet] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
        [InputTime] [datetime] NULL, 
        [Remark] [varchar] (500) NULL,       //--未更改之前为50,而GetFee_tab 表里该字段为500,因此字段长度不够,造成出错

        [OrgRemark] [varchar] (50) NULL,
 [AddType] int,
 [ReceiptNo] [varchar] (20) NULL,
 [SupNameNo] [varchar] (20) NULL,
        [SupName] [varchar] (50) NULL,
 [DutyVolume] [decimal](18, 2) NULL,
        [OrderNo] [varchar] (50) NULL)
AS
BEGIN 
--Insert 销售业绩
INSERT INTO @GetAccAch(SaleNo,SaleDate,AccountNo,AccountExec,headship,EP_Rank,PostNetNO,PostNet,CustNo,CustName,CustType,FeeType,Fee,WeightRate,AchRateFee,
Inputer,InputNet,InputTime,Remark,OrgRemark,AddType,ReceiptNo,SupNameNo,SupName,DutyVolume,OrderNo)
SELECT G.SaleNo,G.GetFeeDate,G.ClerkNo,G.Clerk,E.headship,E.EP_Rank,G.SaleNetId,G.SaleNet,G.CustNo,G.CustName,G.CustType,GD.GFD_FeeType,GD.GFD_Price,GD.GFD_WeightRate,GD.GFD_Price*GD.GFD_WeightRate/100,
G.Inputer,G.InputNet,G.InputTime,G.Remark+GD.GFD_PurPro,'销售业绩',1,GD.GFD_ReceiptNo,E.EP_SupNameNo,E.EP_SupName,E.EP_DutyVolume,G.OrderNo
FROM GetFee_tab G inner join GetFeeDetail_tab GD on G.GetFeeID=GD.GFD_No left outer join Employee_tab E on E.UserNo=G.ClerkNo
Where G.Finance=1 /*and G.SaleNetID=@TrackNetNO*/ and (GD.GFD_FeeTypeNo=1 or GD.GFD_FeeTypeNo=4 or GD.GFD_FeeTypeNo=5) --1.充值服务费用,4。投资本金,5。其他费用

--Insert 销售充值卡业绩
INSERT INTO @GetAccAch(SaleNo,SaleDate,AccountNo,AccountExec,headship,EP_Rank,PostNetNO,PostNet,CustNo,CustName,CustType,FeeType,Fee,WeightRate,AchRateFee,
Inputer,InputNet,InputTime,Remark,OrgRemark,AddType,ReceiptNo,SupNameNo,SupName,DutyVolume,OrderNo)
SELECT S.SP_No,S.SP_Date,S.SP_ClerkNo,S.SP_Clerk,E.headship,E.EP_Rank,S.SP_NetId,S.SP_NetName,S.SP_CustNo,S.SP_CustName,S.SP_CustType,S.SP_SVType,S.SP_Price,S.SP_WeightRate,S.SP_Price*S.SP_WeightRate/100,
S.SP_Inputer,S.SP_InputNet,S.SP_InputTime,S.SP_Remark,'销售充值卡业绩',1,S.SP_ReceiptNo,E.EP_SupNameNo,E.EP_SupName,E.EP_DutyVolume,S.SP_OrderNo
FROM WtRechCard_Tab S left outer join Employee_tab E on E.UserNo=S.SP_ClerkNO
Where S.SP_Verify=1 /*and S.SC_NetId=@TrackNetNO*/ and (S.SP_SVTypeID=1 or S.SP_SVTypeID=4) --1.充值服务费用,4。投资本金

--Insert 销账业绩
INSERT INTO @GetAccAch(SaleNo,SaleDate,AccountNo,AccountExec,headship,EP_Rank,PostNetNO,PostNet,CustNo,CustName,CustType,FeeType,Fee,WeightRate,AchRateFee,
Inputer,InputNet,InputTime,Remark,OrgRemark,AddType,ReceiptNo,SupNameNo,SupName,DutyVolume)
SELECT C.CancelFeeID,C.CancelFeeDate,CT.ClerkNo,CT.Clerk,E.headship,E.EP_Rank,C.CancelFeeNetNO,C.CancelFeeNet,C.CustNo,C.CustName,C.CustType,C.PayExpt,C.CancelFee,C.WeightRate,C.CancelFee*C.WeightRate/100,
C.Inputer,C.InputNet,C.InputTime,C.Remark,'客户转账业绩',1,C.ReceiptNo,E.EP_SupNameNo,E.EP_SupName,E.EP_DutyVolume
FROM CancelFee_tab C inner join Customer_tab CT on C.CustNo=CT.CustNo left outer join Employee_tab E on E.UserNo=CT.ClerkNo left outer join Tab_SysParam T on T.ReferenceNo=503
Where C.Finance=1 and /*C.CancelFeeNetNO=@TrackNetNO and*/ C.PayExptNo=2 /*2.转入到充值服务费中*/ and (C.CancelFeeTypeID=2 or C.CancelFeeTypeID=3) --2.保证金 3预存款

--Insert 客户销账..业务来源于销售
INSERT INTO @GetAccAch(SaleNo,SaleDate,AccountNo,AccountExec,headship,EP_Rank,PostNetNO,PostNet,CustNo,CustName,CustType,FeeType,Fee,WeightRate,AchRateFee,
Inputer,InputNet,InputTime,Remark,OrgRemark,AddType,ReceiptNo,SupNameNo,SupName,DutyVolume,OrderNo)
SELECT C.CancelFeeID,C.CancelFeeDate,G.ClerkNo,G.Clerk,E.headship,E.EP_Rank,C.CancelFeeNetNO,C.CancelFeeNet,C.CustNo,C.CustName,C.CustType,C.PayExpt,CD.Price,100,CD.Price,
C.Inputer,C.InputNet,C.InputTime,C.Remark,'客户变更或终止服务-销售',2,CD.ReceiptNo,E.EP_SupNameNo,E.EP_SupName,E.EP_DutyVolume,G.OrderNo
FROM CancelFee_tab C inner join CancelFeeDetail CD on C.CancelFeeID=CD.CancelFeeID
inner join GetFeeDetail_tab GD on GD.GFD_ReceiptNo=CD.ReceiptNo inner join GetFee_tab G on G.GetFeeID=GD.GFD_No left outer join Employee_tab E on E.UserNo=G.ClerkNo
Where C.Finance=1 and /*C.CancelFeeNetNO=@TrackNetNO and*/ C.PayExptNo<>2 /*2.转入到充值服务费中*/ and (C.CancelFeeTypeID=1 or C.CancelFeeTypeID=4) --1.充值服务费用,4。投资本金

--Insert 客户销账..业务来源于充值
INSERT INTO @GetAccAch(SaleNo,SaleDate,AccountNo,AccountExec,headship,EP_Rank,PostNetNO,PostNet,CustNo,CustName,CustType,FeeType,Fee,WeightRate,AchRateFee,
Inputer,InputNet,InputTime,Remark,OrgRemark,AddType,ReceiptNo,SupNameNo,SupName,DutyVolume,OrderNo)
SELECT C.CancelFeeID,C.CancelFeeDate,S.SP_ClerkNo,S.SP_Clerk,E.headship,E.EP_Rank,C.CancelFeeNetNO,C.CancelFeeNet,C.CustNo,C.CustName,C.CustType,C.PayExpt,CD.Price,100,CD.Price,
C.Inputer,C.InputNet,C.InputTime,C.Remark,'客户变更或终止服务-充值卡',2,CD.ReceiptNo,E.EP_SupNameNo,E.EP_SupName,E.EP_DutyVolume,S.SP_OrderNo
FROM CancelFee_tab C inner join CancelFeeDetail CD on C.CancelFeeID=CD.CancelFeeID
inner join WtRechCard_Tab S on S.SP_ReceiptNo=CD.ReceiptNo left outer join Employee_tab E on E.UserNo=S.SP_ClerkNo
Where C.Finance=1 and /*C.CancelFeeNetNO=@TrackNetNO and*/ C.PayExptNo<>2 /*2.转入到充值服务费中*/ and (C.CancelFeeTypeID=1 or C.CancelFeeTypeID=4) --1.充值服务费用,4。投资本金

--Insert 客户销账..业务来源于系统转账
INSERT INTO @GetAccAch(SaleNo,SaleDate,AccountNo,AccountExec,headship,EP_Rank,PostNetNO,PostNet,CustNo,CustName,CustType,FeeType,Fee,WeightRate,AchRateFee,
Inputer,InputNet,InputTime,Remark,OrgRemark,AddType,ReceiptNo,SupNameNo,SupName,DutyVolume)
SELECT C.CancelFeeID,C.CancelFeeDate,CT.ClerkNo,CT.Clerk,E.headship,E.EP_Rank,C.CancelFeeNetNO,C.CancelFeeNet,C.CustNo,C.CustName,C.CustType,C.PayExpt,CD.Price,100,CD.Price,
C.Inputer,C.InputNet,C.InputTime,C.Remark,'客户变更或终止服务-系统转账',2,CD.ReceiptNo,E.EP_SupNameNo,E.EP_SupName,E.EP_DutyVolume
FROM CancelFee_tab C inner join CancelFeeDetail CD on C.CancelFeeID=CD.CancelFeeID
inner join CustAcc_tab CA on CA.CA_ReceiptNo=CD.ReceiptNo inner join Customer_tab CT on C.CustNo=CT.CustNo left outer join Employee_tab E on E.UserNo=CT.ClerkNo
Where C.Finance=1 and /*C.CancelFeeNetNO=@TrackNetNO and*/ C.PayExptNo<>2 /*2.转入到充值服务费中*/ and (C.CancelFeeTypeID=1 or C.CancelFeeTypeID=4) --1.充值服务费用,4。投资本金
 and CA.CA_OrgTypeNo>=5  --CA_OrgTypeNo>=5。。为系统转账产生的数据
  RETURN 
 
END   
 

 

 

 

 

 


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 

 

 

 

 

 

解决方法:

将参数里的Remark字段加大长度即可。

        [Remark] [varchar] (500) NULL,       //--未更改之前为50,而GetFee_tab 表里该字段为500,因此字段长度不够,造成出错

分享到:
评论
1 楼 njl_041x 2011-11-23  
楼主,我有个字段是varchar(max)程序里使用SqlDbType.Text。
当参数长度超19000后,就报这个错。低于这个字就可以。
请问应如何解决???

我的邮箱 njl_041x@163.com

相关推荐

    将截断字符串或二进制数据,语句已终止,错误.rar

    在编程和数据库操作中,"将截断字符串或二进制数据,语句已终止" 是一个常见的错误提示,这通常发生在尝试存储过长的数据到字段时,该字段的长度不足以容纳这些数据。这个错误主要涉及到数据库管理和编程语言的交互,...

    MSSQL 将截断字符串或二进制数据问题的解决方法

    地图数据存放在sqlserver 2008中,使用mapxtreme7 开发时,使用Feature.Update()方法时出错的提示包含“MSSQL 将截断字符串或二进制数据” 主要原因就是给某个字段赋值时,内容大于字段的长度或类型不符造成的 解决...

    sql Server 表中字段二进制截取查找

    sql server 表中字段二进制截取查找,快速定位不合规字段

    SQL Server中实现二进制与字符类型之间的数据转换

    在SQL Server数据库中,二进制数据类型(如varbinary)和字符数据类型(如varchar)之间的转换是非常常见的操作,特别是在处理数据导入导出、格式转换或者解析特殊格式的二进制数据时。本文主要讨论如何在SQL Server...

    SQL查询二进制内容

    因此,在查询时往往需要将二进制数据转换为可读性更好的形式,如十六进制字符串或者Base64编码。 #### 三、示例代码分析 提供的SQL脚本示例通过一系列操作实现了查询二进制字段内容的目的: ```sql declare @val ...

    SQL截断二进制错误的查找工具,解决insert字段较多时挨个查找的麻烦

    查找SQL报截断字符串的字段

    SQL Substring提取部分字符串

    expression 字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。 start 整数或可以隐式转换为 int 的表达式,指定子字符串的开始位置。 length 整数或可以隐式转换为 int 的...

    MYSQL,SQLSERVER,ORACLE常用的函数

    将二进制转换为十六进制字符串。例如: ```sql SELECT RAW_TO_HEX(X'ff') FROM dual; ``` 输出结果为“ff”。 #### 45. ROWID_TO_CHAR 将ROWID类型转换为字符类型。例如: ```sql SELECT ROWID, ROWIDTOCHAR(ROWID)...

    SQLServer多种去除尾数多余的0

    在SQL Server中,处理数值类型的数据时,特别是浮点数(float)或定点数(decimal, numeric),我们可能会遇到一个问题:当数值末尾有过多的零时,它们并不总是直观地显示出来。尤其是在进行计算或者存储后,这些零...

    ORACLE与SQLSERVER函数异同比较

    - **字符串长度**: `LENGTH`函数在Oracle中用于计算字符串长度,在SQL Server中使用`LEN`或`DATALENGTH`函数。 - **最大/最小字符串**: Oracle中的`GREATEST`和`LEAST`函数用于找出一组字符串中的最大值和最小值,而...

    SQL函数大全.pdf

    3. TO_CHAR、TO_DATE:用于转换日期时间格式,将日期时间转换为字符串或相反。 4. CURRENT_DATE/TODAY:获取当前日期。 5. MDY:月/日/年格式的日期构造函数。 6. DATETIME:将日期和时间结合起来的表达式。 7. ...

    16进制转换工具 SQL注入学习小工具 学习

    在计算机科学中,16进制常用于表示二进制数据,因为每个16进制数字可以精确地表示四位二进制数,使得长串二进制数字更易于阅读和处理。16进制转换工具就是用来帮助我们把十进制、二进制或者其他进制的数据转换成16...

    sql server基本系统函数

    - **BINARY_CHECKSUM()**:返回行中二进制数据的校验和。 - **TEXTIMAGE()**:返回文本或图像类型的值。 通过以上介绍可以看出,SQL Server内置函数覆盖了数据库操作的各个方面,熟练掌握这些函数能够帮助开发者更...

    易语言字节集到二进制互转源码-易语言

    3. **处理边界问题**:在转换过程中可能会遇到字节集长度不是8的倍数的情况,这时需要考虑如何填充或截断二进制字符串以保持数据的一致性。 4. **错误处理**:在实现转换功能时,还需要考虑到可能出现的错误情况,...

    oracle系统内置函数大全

    3. CONCAT函数:将两个字符串拼接起来,如果第一个字符串为NULL,则返回第二个字符串;如果第二个字符串为NULL,则返回第一个字符串。 4. INITCAP函数:将字符串中的每个单词的首字母转换为大写,其余字母转换为小写...

    数据类型关系映射表

    - **解释**:SQL Server 中的可变长度二进制类型 `VARBINARY` 映射为 JDBC 同样类型的 `VARBINARY`。 - **注意事项**:这种类型用于存储可变长度的二进制数据,在映射过程中需要注意数据长度的变化。 - **VARCHAR...

    ORACLE 函数大全(转)

    - `TO_BINARY_DOUBLE()`和`TO_BINARY_FLOAT()`:将字符串转换为二进制浮点数。 5. **逻辑函数**: - `AND`,`OR`,`NOT`:基本的布尔逻辑运算符。 - `NVL()`:如果表达式为空则返回指定的默认值。 - `DECODE()`...

    oracle操作实例

    根据提供的文件信息,我们可以归纳出以下关于Oracle操作的...以上知识点涵盖了Oracle操作的基本方面,包括连接、管理、数据类型、字符串及数值处理等功能。这些知识对于Oracle数据库的日常维护和开发工作都至关重要。

    天津理工大学计算机专业数据库实验二.doc

    当尝试插入违反这些约束的数据时,系统会报错,例如“截断字符串或二进制数据”,这体现了数据库系统在数据层面实施的完整性检查。 2. **存储过程**: - **创建存储过程**:存储过程是一组预先定义并编译好的SQL...

Global site tag (gtag.js) - Google Analytics