0

私のwhere句を見てください。そのうちの1つがコメントアウトされています。

これをそのまま実行すると、結果は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 は変数を として設定します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 に答える