Ошибка SQL Server: строковые или двоичные данные будут усечены

Моя таблица:

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.

Почему это???

Ответ 1

Вы пытаетесь записать больше данных, чем может хранить определенный столбец. Проверьте размеры данных, которые вы пытаетесь вставить, с размерами каждого из полей.

В этом случае transaction_status является varchar (10), и вы пытаетесь сохранить 19 символов.

Ответ 2

этот тип ошибки обычно возникает, когда вам нужно помещать символы или значения больше, чем вы указали в таблице базы данных, как в этом случае: вы указываете transaction_status varchar(10) но вы на самом деле пытаетесь сохранить  _transaction_status  которые содержат 19 символов. почему вы столкнулись с этим типом ошибок в этом коде.

Ответ 3

Эта ошибка обычно встречается при вставке записи в таблицу, где один из столбцов является типом данных VARCHAR или CHAR, а длина вставленного значения больше длины столбца.

Я не удовлетворен тем, как Microsoft решила сообщить об этом "сухом" ответном сообщении без какой-либо точки поиска ответа.