0

看看我的 where 子句,其中一个被注释掉了。

如果我按原样运行,我得到的结果为 0

但是如果我改变了我使用的 WHERE 子句,它就会起作用。我不明白,@Username 等于“Kleg”,但显然不是。有人能告诉我我在哪里犯错了吗

declare @UserName as varchar
set @UserName='Kleg'

declare @return as int
 set @return=(SELECT  userId
        FROM    users
        WHERE   UserName='Kleg')
--        WHERE   UserName=@Username)


SELECT  COALESCE(@return,0)

我的查询更加基本,这个真的难倒我,其他人可以试试这个,看看他们是否可以复制我的问题,也许问题出在服务器上

declare @UserName as varchar
set @UserName='Kleg'

if (@UserName = 'Kleg')
select 1
else select 0

这返回 0

4

4 回答 4

3

由于您只有 @UserName 声明为 varchar,如果您选择 @UserName,您将看到它只返回第一个字符。

于 2012-05-31T15:52:21.923 回答
0

尝试替换它,注意我分配变量的方式发生了变化:

declare @UserName as varchar
set @UserName='Kleg'

declare @return as int
SELECT @return = userId
 FROM    users
 WHERE   UserName='Kleg')
--        WHERE   UserName=@Username)

SELECT  COALESCE(@return,0)

请注意,如果与 where 子句有多个匹配项,它将不起作用!

于 2012-05-31T15:46:57.870 回答
0

我做了一些测试,它不是 100% 确定的,但是看起来很像你说的

declare @UserName as varchar 

SQL 将变量设置为 a varchar(1),这意味着您的 where 子句正在搜索值“K”。试试这个:

declare @UserName as varchar(50)

或者,更好的是 UserName 列的长度。

于 2012-05-31T15:54:41.220 回答
0

您需要说明 varchar 中有多少个字符。将您的代码更改为以下内容,它应该可以工作:

declare @UserName as varchar(50)
set @UserName='Kleg'

if (@UserName = 'Kleg')
select 1
else select 0
于 2012-05-31T15:55:14.883 回答