错误信息:
消息 8152,级别 16,状态 14,过程 IR_STK_VAL_FIFO,第 74 行
字符串或二进制数据将被截断。
我正在运行并导致错误的查询:
EXEC [dbo].[IR_STK_VAL_FIFO] N'01-Jan-2012', N'25-May-2017', 0, '', 0, '', 0, '', 0, 0, '', N'S', N'05-Jul-2012', 0
我有一个存储过程,其中大约在此表的最后一行出现错误:
CREATE TABLE #PAE_TR_ROWS
(
productId varchar(7),
docType varchar(3),
docId int,
docDate SMALLDATETIME,
qtyIn int,
qtyOut int,
rate decimal(12,4),
sortOrder varchar(255),
appRate decimal(12,4)
)
在上表中插入:
INSERT INTO #PAE_TR_ROWS (productId, docType, docId, docDate, qtyIn, qtyOut, rate, sortOrder, appRate)
VALUES (@new_productId, @new_docType, @new_docId, @new_docDate, 0, @balanceQty, @new_rate, @new_sortOrder, @rate)
错误“字符串或二进制数据将被截断”意味着您正在尝试插入大于某一列可以接受的数据。
发生这种情况是因为您传递给 EXEC 命令的值顺序不正确。
例如,您传递的第一个值是这个日期:
EXEC [dbo].[IR_STK_VAL_FIFO] N'01-Jan-2012',N'25-May-2017',0...
▲
并且在命令中,它被声明为
productId
:
▼
INSERT INTO #PAE_TR_ROWS(productId,...
VALUES(@new_productId,...
▲
但是,列
productId
只有
varchar(7)
,因此值
01-Jan-2012
超出了该大小。这就是您收到此错误的原因。
字符串或二进制数据将被截断。意味着,在您尝试插入数据的表中,您的列之一(在本例中类型为varchar)有在我的例子中,我使用的是默认长度,它是 255 个字符,因此该列的 max_length 小于 对象上的 字符 您试图为 此字段保存,例如:
@Entity
public class Person {
private String name;
private String address;
}
上面定义的字段将在表中具有默认的字符大小,即255,如果某个特定人员的地址超过此 max_length,则会发生此错误。