Вопрос по sql-server – Ошибка SQL Server: строка или двоичные данные будут усечены

10

Мой стол:

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.

Это почему ???

@praveen Вау, это не очень хорошее предложение на всех. Вы не знаете, что они не знают, как долго будет длиться столбец, и первым ответом будет выяснение. Стоит ли покупать дом с 30 спальнями, если у меня 30 детей? Конечно, нет. Aaron Bertrand
+1 за предоставление достаточной информации, чтобы понять ваш вопрос. Я чуть не забрал его за то, что не прочитал сообщение об ошибке и не посмотрел на ваш SQL, чтобы поймать его самостоятельно. :-) Ken White
Просто предложение: если вы не уверены в длине значений в Transaction_status, сделайте это varchar (max) praveen

Ваш Ответ

3   ответа
3

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

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

48

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

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

+1. Ударь меня до 8 секунд.
3

values more than that you have specified in Database table like in this case: you specify transaction_status varchar(10) but you actually trying to store
_transaction_status  которые содержат 19 символов. вот почему вы столкнулись с этим типом ошибки в этом коде ..

Похожие вопросы