2013-03-27 133 views
1
Declare @STAF_TO NVARCHAR(100) 

我有以下查詢的SQL Server存儲過程的一部分:解決「字符串或二進制數據將被截斷」的錯誤

SELECT @SF_TO = TP.FRST_NAME + ' ' + TP.MDLE_NAME + ' ' + TP.LAST_NAME 
FROM tbl_Sf TS 
INNER JOIN tbl_Pl TP ON (TS.POPL_PK = TP.POPL_PK) 
WHERE TS.SF_PK = @ID 

我知道@ID等於140(INT類型)基於我之前插入的打印語句。當我嘗試單獨執行此查詢時,它工作正常。

然而,當我嘗試運行它作爲存儲過程我得到以下錯誤的一部分:

Msg 8152, Level 16, State 13, Procedure Proc_Name, Line 57
String or binary data would be truncated.

線57是其中所述SELECT語句查詢以上。任何人有任何想法,爲什麼會發生這種情況?

編輯:我試着改變NVARCHAR(100)NVARCHAR(200)NVARCHAR(MAX),仍然有錯誤。另外,如果我單獨運行它,查詢工作正常(有100個字符)。

+5

可以顯示'@ SF_TO'的聲明嗎?這是最有可能被截斷的變量。 – 2013-03-27 17:42:15

+3

還有什麼是「FRST_NAME」,「MDLE_NAME」和「LAST_NAME」的定義。我也建議用一個不會錯過元音的鍵盤替換你的鍵盤。任何想法比'FIRST_NAME'輸入'FRST_NAME'難*多難*?你保存了一個角色,但你獲得了一些灰色的頭髮。 – 2013-03-27 17:44:54

+0

@ Love2Learn爲'@ SF_TO'添加了聲明 – 2013-03-27 17:46:44

回答

7

幾乎可以肯定,你列的定義:

FRST_NAME 
MDLE_NAME 
LAST_NAME 

加起來超過98個字符(+2爲空格)。

我建議宣佈@SF_TO大於NVARCHAR(100)(但是,我確切地說,我不知道)。

錯誤消息很煩人,以排除故障,當然。如果在產出中包含更多具體內容,那將是非常好的。 Please vote/comment on this Connect item

+3

+1,並進行投票。那個錯誤信息太可笑了! – 2013-03-27 17:55:53

1

你遇到這個錯誤的串聯:

TP.FRST_NAME + ' ' + TP.MDLE_NAME + ' ' + TP.LAST_NAME 

超過100字符。現在,這可能不是每一行都是如此,但是對於你選擇的那個,這是真的。如果您運行此選擇語句:

SELECT TP.FRST_NAME + ' ' + TP.MDLE_NAME + ' ' + TP.LAST_NAME 
FROM tbl_Sf TS 
INNER JOIN tbl_Pl TP ON (TS.POPL_PK = TP.POPL_PK) 
WHERE LEN(TP.FRST_NAME + ' ' + TP.MDLE_NAME + ' ' + TP.LAST_NAME) > 100 

您將能夠找到有問題的行。另一種方法是簡單地使@STAF_TO變量等於這三列的長度加在一起+2。所以,如果列中的字符長度都是50,那麼@STAF_TO應該是152

+0

該查詢沒有返回任何內容...... – 2013-03-27 17:52:08

+0

@ArtF,如果該查詢沒有返回任何內容,那麼這個過程還有更多我們沒有看到的內容。錯誤不會在那裏發生。或者這不是程序中的確切查詢。我不知道是什麼,但有些東西不見了。也許你可以發佈整個程序? – 2013-03-27 17:59:44

2

串聯語句幾乎肯定會導致記錄長於@SF_TO的聲明長度。您應該增加@SF_To的長度。

相關問題