我有一个名为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'
但是如果我在令牌的末尾添加任何东西(当然在表中不存在),我也得到1!
exec sp_issessionactive @token='E883735B40CF4F939EAD133992770C87aaaaaaaaaaaaaaaaa'
发生了什么事?我在SQL Server处理字符串比较的方式中缺少一些东西..
答案 0 :(得分:4)
向我们展示存储过程代码!
最重要的是 - 如何定义存储过程的参数?
参数@Token
的数据类型是什么?
这只是VARCHAR
吗?
在这种情况下 - 你已经定义了 1个字符长度的参数 - 所以当然它无法区分你传递的那两个字符串......