我在基本的select语句中找不到错误

时间:2012-05-31 15:45:05

标签: sql

看看我的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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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子句有多个匹配项,则无效;

答案 2 :(得分:0)

我做了一些测试,这不是100%肯定,但它看起来非常像你说

declare @UserName as varchar 

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

declare @UserName as varchar(50)

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

答案 3 :(得分:0)

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

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

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