繁体   English   中英

具有varchar参数的SQL Server存储过程返回错误结果

[英]SQL Server Stored Procedure with varchar parameter returns wrong results

我创建了一个存储过程,该存储过程的参数类型为varchar(5) 我的存储过程运行良好,并返回了正确的结果,直到我将其传递给它的字符串是6个或更多字符为止。

发生的情况是它忽略了第6个以上的字符,仅基于前5个字符返回了结果,这是错误的结果。 我希望在传递更长的字符串时会引发错误。

这是一个错误还是有办法更改SQL Server的这种行为?

create procedure usp_testproc 
    @param1 varchar(5)
as
begin
    if @param1 = '12345'
    begin
       select 'you got this right'
    end 
    else
    begin
       select 'String Mismatch'
    end
end

不管我们是否打电话

exec usp_testproc '12345'

要么

exec usp_testproc '123456'

我们得到相同的结果

varchar(5) 

这意味着您将仅获得前5个字符,因此它将忽略其余的字符,“()”内部的数字表示将在此参数中存储多少个符号。 您可以确保使用可以从过程中返回的最长字符串,这很好,这是您可以阅读的一些附加内容: char和varchar(docs.microsoft)

您需要指定输入参数的正确类型:

create procedure usp_testproc @param1 varchar(<max number of chars here>)
as...

根据存储过程内部执行的操作,该存储过程运行良好。 该错误在您的实现中。 您的SP最多接受5个字符长的字符串,但是您希望它可以处理超过5个字符的字符串,这是矛盾的。 因此,您必须修改SP才能获得所需的结果,您可以轻松地将varchar参数的长度增加到可接受的范围,以使输入不超过该范围。 因此,您可以执行以下操作:

create procedure usp_testproc @param1 varchar(50)
as
begin

if len(@param1)<6
begin
    if @param1='12345'
        begin
           select 'you got this right'
        end 
        else
        begin
           select 'String Mismatch'
        end
    end
else
    begin
       select 'Parameter length is high!'
    end 
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM