2016-04-04 18 views
1

私のデータベースにUserAcountテーブルがあります。 Profileページでは、ユーザーは情報を更新できます。 Passwordが満たされている場合は、他のフィールドを更新するだけで更新する必要があります。私のtsqlクエリで何が間違っていますか?

私はこれを行うが、以下のエラーが発生しました:

プロシージャまたは関数「EditUserInfo」は供給されなかったパラメータ「@Password」を、期待しています。

ALTER PROCEDURE EditUserInfo 
(
    @FirstName NVARCHAR(100), 
    @LastName NVARCHAR(200), 
    @UserName NVARCHAR(100), 
    @Password BINARY 
) 
AS 
BEGIN 
    IF (@Password IS NULL) 
    BEGIN 
     UPDATE UserAcount 
     SET FirstName = @FirstName, 
      LastName = @LastName 
     WHERE UserName = @UserName 
    END 
    ELSE 
    BEGIN 
     UPDATE UserAcount 
     SET FirstName = @FirstName, 
      LastName = @LastName, 
      [password] = @Password 
     WHERE UserName = @UserName 
    END 
END 

あなたは私を助けてくださいもらえますか?

+1

メイク '@Passwordバイナリ= NULL' –

+0

はSPを呼び出している間、それはバイナリ=「パスワード」のよう@pwd宣言した文字列では動作しませんパスワードの正しい値(データ型)を供給していることを確認してください –

答えて

2
ALTER PROCEDURE dbo.EditUserInfo 
(
    @FirstName NVARCHAR(100), 
    @LastName NVARCHAR(200), 
    @UserName NVARCHAR(100), 
    @Password BINARY = NULL 
) 
AS BEGIN 

    SET NOCOUNT ON 

    UPDATE dbo.UserAcount 
    SET FirstName = @FirstName, 
     LastName = @LastName, 
     Password = ISNULL(@Password, Password) 
    WHERE UserName = @UserName 

END 
3

@passwordパラメータの後に "= NULL"を追加することができます。

alter procedure EditUserInfo 
(@FirstName nvarchar(100), 
@LastName nvarchar(200), 
@UserName nvarchar(100), 
@Password binary = NULL 
) 
as 
begin 
    if (@Password IS NULL) 
     BEGIN 
      UPDATE UserAcount 
      SET 
       FirstName = @FirstName , 
       LastName = @LastName 
      where UserName = @UserName 
     END 
    ELSE 
     BEGIN 
      UPDATE UserAcount 
      SET 
       FirstName = @FirstName , 
       LastName = @LastName, 
       [Password] = @Password 
      where UserName = @UserName 
     END 
end 
関連する問題