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

时间:2015-03-04 19:01:16

标签: sql sql-server stored-procedures

我有一个名为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处理字符串比较的方式中缺少一些东西..

1 个答案:

答案 0 :(得分:4)

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

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

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

这只是VARCHAR吗?

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