SQL 字符串比较:不等于但 SQL 表示相等

SQL string comparison: not equal but SQL says equal

我有一个名为 sp_isSessionActive 的简单存储过程,它采用名为 'token' 的参数,其中包含以下 SQL:

SELECT 1 AS Active 
FROM dbo.Mobile_Session
WHERE Token = @token AND GETDATE() BETWEEN StartTime AND EndTime;

如果我使用数据库中存在且时间跨度正确的令牌调用该过程,我将得到正确的结果 1。

EXEC sp_issessionactive @token='E883735B40CF4F939EAD133992770C87'

但是如果我在标记的末尾添加任何东西(当然 table 中不存在),我也会得到 1!

exec sp_issessionactive @token='E883735B40CF4F939EAD133992770C87aaaaaaaaaaaaaaaaa'

这是怎么回事?我在 SQL 服务器处理字符串比较的方式中遗漏了一些东西..

向我们展示存储过程代码!

最重要的是——存储过程的参数是如何定义的?

您的参数 @Token 数据类型 是什么?

只是 VARCHAR 吗?

在那种情况下 - 你已经定义了一个 1 个字符长度的参数 - 所以它当然无法区分你传递的那两个字符串.....