2013-03-27 132 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的长度。

相关问题