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