SQL存储的过程——字符串或二进制数据将被截断

SQL存储的过程——字符串或二进制数据将被截断,sql,tsql,Sql,Tsql,我有一个存储过程,其中一个参数输入1+0+1663作为varchar(50) 我得到以下信息: String or binary data would be truncated. 如果我输入一个不同的值,它可以正常工作。在1+0+1663中是否有一种方法可以让我输入,这样就不会造成问题。我相信问题可能在于,由于+符号,SQL正试图使其成为一个更大的数字 这就是我用来执行的 exec usp_Insert_Lst 'E3441-NI0dd4-12',

我有一个存储过程,其中一个参数输入1+0+1663作为varchar(50) 我得到以下信息:

    String or binary data would be truncated.
如果我输入一个不同的值,它可以正常工作。在1+0+1663中是否有一种方法可以让我输入,这样就不会造成问题。我相信问题可能在于,由于+符号,SQL正试图使其成为一个更大的数字

这就是我用来执行的

    exec usp_Insert_Lst   'E3441-NI0dd4-12', 
                              null, -- fname
                              null, -- lanme
                              null,  -- mi
                              null,  -- email
                              '1+FEU0+1663' -- PHID

我无法仅凭你提供的问题细节来重现你的情况

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):

如果此插入返回: '字符串或二进制数据将被截断。'

那么它只能表示您的_table.fname或_table.PHID分别小于LEN('E3441-NI0dd4-12')和/或LEN(1+0+1663)


根据您的评论:我将字段设置为varchar(50)

如果存储过程有@param1 varchar(50)和_table.field1 varchar(50) 然后,可能是给出字符串或二进制消息的错误在过程开始和插入到您的_表之间

CREATE PROC usp_Insert_Lst(
    @p1 varchar(50)
...
)
AS
...
...  <-- error to be found here
...
INSERT your_table (param1,...)
SELECT @p1,...
CREATE PROC usp\u Insert\u Lst(
@p1瓦查尔(50)
...
)
作为
...

... 我无法仅凭你提供的问题细节来重现你的情况

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):

如果此插入返回: '字符串或二进制数据将被截断。'

那么它只能表示您的_table.fname或_table.PHID分别小于LEN('E3441-NI0dd4-12')和/或LEN(1+0+1663)


根据您的评论:我将字段设置为varchar(50)

如果存储过程有@param1 varchar(50)和_table.field1 varchar(50) 然后,可能是给出字符串或二进制消息的错误在过程开始和插入到您的_表之间

CREATE PROC usp_Insert_Lst(
    @p1 varchar(50)
...
)
AS
...
...  <-- error to be found here
...
INSERT your_table (param1,...)
SELECT @p1,...
CREATE PROC usp\u Insert\u Lst(
@p1瓦查尔(50)
...
)
作为
...

... 你能告诉我们你是如何执行它和存储过程代码的吗?你能告诉我们你是如何执行它和存储过程代码的吗在
?…如下:
“1+0+1663”
?您需要向我们显示sp的代码和插入到中的表的定义。Carlos,我将字段设置为varchar(50),为什么会出现这种情况,请检查我的最新编辑。它可以帮助显示完整的过程代码,尽管如果太长,我可能不会阅读:)Carlos,我的字段为varchar(50),那么为什么它会出现,请检查我的最新编辑。它可以帮助显示完整的过程代码,尽管如果太长,我可能不会阅读:)