2016-10-28 6 views
0

表:(tblUser)Sql集計関数を使用して列の値を選択するクエリ?

______________________________ 
|Column Name | Data Type  | 
|------------------------------| 
|  ID  |  bigint  | 
| UserName | nvarchar(100) | 
| Password | nvarchar(100) | 
| Email  | nvarchar(200) | 
| UserType |  bit  | 
|_____________|________________| 

これは私がしようとしたものです:

列 'tblUsers.UserType' されています

CREATE Procedure spAutheticateUser 
@UserName nvarchar(100), 
@Password nvarchar(200) 
as 
Begin 
    Declare @Count int 
    Declare @Type bit 

    Select @Count = COUNT(UserName), @Type = UserType from tblUsers 
    where [UserName] = @UserName and [Password] = @Password 

    If (@Count = 1 and @Type = 'True') 
    Begin 
     Select 1 as ReturnCode 
    End 
    Else If (@Count = 1 and @Type = 'False') 
    Begin 
     Select 2 as ReturnCode 
    End 
    Else 
    Begin 
     Select -1 as ReturnCode 
    End 
End 

これは私がのSQLServerに乗るエラーです選択リストでは無効です。これは、集計関数またはGROUP BY句に含まれていないためです。

実際に、このストアドプロシージャをloginButton_click関数の後ろに呼び出す必要があります。私はユーザー情報を検証したいと思うし、ユーザーがどのタイプに属しているかチェックしたい。 UserTypeに応じて、特定のページにリダイレクトします。

機能を達成する方法を教えてください。ありがとう。あなたはあなたにのUserTypeして、グループを追加すること

+1

アドオン 'GROUP BY UserType'をクエリに追加します。 –

+0

UserNameフィールドはどこですか? – Andrea

答えて

0
は、SELECT文を変更

メインクエリ。カウント(@ユーザー名)を取得している特定の理由はありますか?カウント関数を削除すると、Group By節は必要ありません。

+0

ありがとうございます。今はエラーはありませんが、ELSE IFは実行されていません。 – EL323

+0

あなたはintとして@typeを宣言し、文字列値 –

+0

と比較しています。実際に@typeはビットです。質問を編集しました。 – EL323

0

てみてくださいを選択していたままの列によってグループに持っているので、あなたは、集約関数を使用しようとしている

Select @Count = COUNT(UserName), @Type = UserType from tblUsers 
where [UserName] = @UserName and [Password] = @Password 
GROUP By UserType 

:以下のように

+0

ありがとうございますが、ELSE IFはまだ実行されていません – EL323

0

テーブルにユーザー名のレコードが複数あるかどうかを確認しています。より多くのレコードがある場合、異なるUserTypesが存在する可能性があります。一度複数のレコードがあるとUserTypeに興味がないので、最小または最大UserTypeを選択するだけです。

select @Count = COUNT(UserName), @Type = MIN(UserType) 
from tblUsers 
where [UserName] = @UserName and [Password] = @Password 

全部:

select 
    case 
    when count(*) = 1 and min(usertype) = 'True' then 1 
    when count(*) = 1 and min(usertype) = 'False' then 2 
    else -1 
    end as returncode 
from tblusers 
where username = @UserName and password = @Password 
+0

UserTypeはビットデータ型ですので、min演算子には無効です – EL323

+0

次に変換してください。 'case'を使用して文字列に変換する:' min(usertype = 1の場合、 'True' else 'False' end) '。 –

0

ないあなたの質問に厳格な答えが、強くお機能に関連するいくつかのヒント:

DECLARE 
    @pwd_1 NVARCHAR(100), 
    @pwd_2 NVARCHAR(100) 

SET @pwd_1 = 'asdf' 
SET @pwd_2 = 'asdf ' 

SELECT 'access granted' 
WHERE @pwd_1 = @pwd_2 


SET @pwd_1 = 'ASDF' 
SET @pwd_2 = 'asdf' 

SELECT 'access granted' 
WHERE @pwd_1 = @pwd_2 

enter image description here

関連する問題