2012-06-01 80 views
10

我的表:SQL服務器錯誤:字符串或二進制數據將被截斷

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. 

這是爲什麼???

+2

+1提供足夠的信息來了解您的問題。儘管我沒有閱讀錯誤信息,並且看着自己的SQL來捕捉它,但我幾乎將它收回。 :-) –

+1

只是一個建議:如果您不確定Transaction_status中的值的長度,請將其設置爲varchar(max) – praveen

+1

@praveen哇,這根本不是一個很好的建議。你不知道他們不知道專欄的時間長短,第一個反應是找出答案。如果我有30個孩子,我應該購買30間臥室的房子嗎?當然不是。 –

回答

42

您正在嘗試寫入比特定列可以存儲更多的數據。根據每個字段的大小檢查您嘗試插入的數據的大小。

在這種情況下,transaction_status是一個varchar(10),您試圖存儲19個字符。

+5

+1。擊敗我8秒。 –

2

這種類型的錯誤時,你必須把字符或值超過您已在數據庫中的表在這種情況下指定的像一般發生: 指定 transaction_status varchar(10) 但實際上你嘗試存儲
_transaction_status 包含19個字符。 這就是爲什麼您在此代碼中遇到此類錯誤的原因。

2

在表中插入記錄時通常會遇到此錯誤,其中一列是VARCHAR或CHAR數據類型,插入值的長度比列的長度長。

我不滿意微軟如何決定用這個「幹」響應消息來告知,而沒有任何點尋找答案。

相關問題