2012-10-10 23 views
3

嘗試使用UPDATE命令在表上爲字符串字段添加前綴。出於某種原因,我得到了字符串或二進制數據將被截斷。 - 即使長度小於字段長度

字符串或二進制數據將被截斷。

異常,即使我的數據的長度很容易適合現場。

使用SQL Server 2008 R2標準版和SSMS 2008 R2。

模板:學習者是一個爲nvarchar(60)

模板:學習者是使用60個字節的數據類型爲nvarchar(30),如圖的sp_help

select LEN('Aaaaaaaa' + LEFT(learner, 52)) myLen from Template order by myLen desc 
>>> max len = 31 

update Template set learner = 'Aaaaaaaa' + LEFT(learner, 52) 
>>> String or binary data would be truncated. 

update Template set learner = 'Aaaaaaaa' + LEFT(learner, 52) 
>>> String or binary data would be truncated. 

update Template set learner = CAST('Aaaaaaaa' + LEFT(learner, 52) AS NVARCHAR(60)) 
>>> String or binary data would be truncated. 

鑑於以下工作:

SELECT CAST('Aaaaaaaa' + LEFT(learner, 52) AS NVARCHAR(60)) FROM Template 
+5

表上的任何觸發器? –

+0

不,但這是一個很棒的提示。謝謝。 – motto

回答

4

感謝您的回覆。

貌似我上的sp_helpSP_COLUMNS上當通過將長度值。由於它是一個NVARCHAR列,所以長度意味着字節長度而不是字符數量。這是因爲NVARCHAR = Unicode(UTF-16)=> 2個字節/字符。

看着CREATE腳本顯示了事實。此外,sp_columns上的PRECISION字段也顯示字符數。

5

您可以嘗試忽略此消息

SET ANSI_WARNINGS OFF 
update ... 
SET ANSI_WARNINGS ON 
+9

不理解爲什麼發生的消息總是一個非常糟糕的主意。 –

+0

你是對的,但有時你只需要繼續前進,忽略輕微的警告。 – alex

+4

我同意,但這個表示數據丟失,因此不是「輕微」。再說一遍:先了解 - 然後再決定。 –

0

我的問題是有另一個日誌表(用於審計跟蹤),由主表上的觸發器填充,列大小也必須更改。

相關問題