【问题标题】:How to solve string or binary data would be truncated in SQL Server stored procedure如何解决 SQL Server 存储过程中字符串或二进制数据会被截断的问题
【发布时间】:2021-01-08 01:58:50
【问题描述】:

错误信息:

消息 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)

【问题讨论】:

  • 您正在尝试将01-Jan-2012 插入productId,这只是varchar(7)
  • productIddocTypesortOrder 之一超出其字符限制。

标签: sql sql-server stored-procedures


【解决方案1】:

错误“字符串或二进制数据将被截断”表示您正在尝试插入大于您的列之一可以接受的数据。

发生这种情况是因为您传递给 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 超过了那个大小。这就是您收到此错误的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多