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 个字符长度的参数 - 所以它当然无法区分你传递的那两个字符串.....
我有一个名为 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 个字符长度的参数 - 所以它当然无法区分你传递的那两个字符串.....