我有一个存储过程,其中一个参数我输入1 + FEU0 + 1663作为varchar(50) 我收到以下消息:
String or binary data would be truncated.
如果我输入不同的值,它可以正常工作。我有没有办法进入1 + FEU0 + 1663,这样就不会造成问题。我认为问题可能是由于+符号,SQL正试图将其变为更大的数字。
这是我用来执行
的 exec usp_Insert_Lst 'E3441-NI0dd4-12',
null, -- fname
null, -- lanme
null, -- mi
null, -- email
'1+FEU0+1663' -- PHID
答案 0 :(得分:0)
我不能仅使用您在问题上提供的详细信息来重现您的案例。
CREATE PROC usp_Insert_Lst(
@p1 varchar(50)
,@p2 varchar(50)
,@p3 varchar(50)
,@p4 varchar(50)
,@p5 varchar(50)
,@p6 varchar(50)
)
AS
SELECT @p1, @p2, @p3, @p4, @p5, @p6
GO
exec usp_Insert_Lst 'E3441-NI0dd4-12',
null, -- fname
null, -- lanme
null, -- mi
null, -- email
'1+FEU0+1663' -- PHID
GO
--Result
--------------- ---- ---- ---- ---- ------------
E3441-NI0dd4-12 NULL NULL NULL NULL 1+FEU0+1663
假设你的程序中有这样的东西(usp_Insert_Lst):
INSERT your_table (param1, fname, lanme, mi, email, PHID)
SELECT @p1, @p2, @p3, @p4, @p5, @p6
如果此插入返回: '字符串或二进制数据将被截断。'
然后它只能意味着your_table.fname或your_table.PHID的大小分别小于LEN('E3441-NI0dd4-12')和/或LEN(1 + FEU0 + 1663)。
根据你的评论:我有字段为varchar(50)
如果存储过程有@param1 varchar(50)和your_table.field1 varchar(50) 然后,给出字符串或二进制消息的错误可能在过程的开头和插入到your_table之间。
CREATE PROC usp_Insert_Lst(
@p1 varchar(50)
...
)
AS
...
... <-- error to be found here
...
INSERT your_table (param1,...)
SELECT @p1,...