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

标签 sql sql-server tsql stored-procedures

我创建了一个存储过程,该过程采用 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/

相关文章:

sql - 在存储过程中使用循环

java - 尝试使用 Hibernate 执行 SELECT 操作时出错

c# - 插入多对多数据库?

sql - 带有 If 语句 AND OR 条件的 Oracle 触发器

.net - 创建新的 SQLCommand 或重复使用相同的 SQLCommand

sql-server - EF5 : Cannot attach the file ‘{0}' as database '{1}'

tsql - T-SQL-如何交换行和列

sql - 操作结果以将行显示为列

sql - Clojure中的简单数据库存储

sql-server - 从值为空的同一表更新项目