我创建了一个存储过程,该过程采用 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 and varchar (docs.microsoft)
关于带有 varchar 参数的 SQL Server 存储过程返回错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47165045/