2

我有一个存储过程,其中一个参数我输入 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
4

1 回答 1

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,...
于 2012-05-04T21:29:56.547 回答