15

我的桌子:

log_id                 bigint
old_value                  xml
new_value                  xml
module                 varchar(50)
reference_id           bigint
[transaction]          varchar(100)
transaction_status         varchar(10)
stack_trace                ntext
modified_on                datetime
modified_by                bigint

插入查询:

INSERT INTO [dbo].[audit_log]
           ([old_value],[new_value],[module],[reference_id],[transaction]
           ,[transaction_status],[stack_trace],[modified_on],[modified_by])
     VALUES
            ('asdf','asdf','Subscriber',4,'_transaction',
            '_transaction_status','_stack_trace',getdate(),555)

错误 :

Msg 8152, Level 16, State 14, Line 1
String or binary data would be truncated.
The statement has been terminated.

这是为什么 ???

4

3 回答 3

59

您正在尝试写入比特定列可以存储更多的数据。根据每个字段的大小检查您尝试插入的数据的大小。

在这种情况下,transaction_status 是一个 varchar(10) 并且您尝试将 19 个字符存储到它。

于 2012-06-01T02:24:16.327 回答
3

这种类型的错误通常发生在您必须放置的字符或值超过您在数据库表中指定的数量时,例如在这种情况下:您指定 transaction_status varchar(10) 但您实际上尝试存储
_transaction_status 包含 19 个字符的字符或值。这就是为什么您在此代码中遇到此类错误的原因..

于 2013-07-22T09:20:31.607 回答
3

在其中一列是 VARCHAR 或 CHAR 数据类型且插入值的长度大于列长度的表中插入记录时,通常会遇到此错误。

我不满意微软如何决定用这个“干巴巴的”响应消息来通知,而没有任何地方可以寻找答案。

于 2015-06-05T09:07:34.273 回答