【发布时间】:2023-04-03 16:58:01
【问题描述】:
我创建了一个带有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'
我们得到相同的结果
【问题讨论】:
-
'123456'超过 5 个字符,这意味着它被您的参数大小varchar(5)截断为'12345'(根据您的代码,而不是您的问题说明varchar(10))。跨度> -
尝试“12345”和“1234”。很确定你会得到不同的结果。
-
正如@SqlZim 解释的那样,它将返回与您传递的任何以
'12345'开头的字符串相同的结果。即使你通过'123456789'。 -
更多关于这里的讨论:stackoverflow.com/questions/4628140/…
-
这是 SQL Server 的问题。有一个关于此问题的开放 Microsoft Connect 项目。connect.microsoft.com/SQLServer/feedback/details/622699/…
标签: sql sql-server tsql stored-procedures