2016-04-04 6 views
1

Veritabanımda UserAcount tablosum var. Profile sayfasında, kullanıcılar bilgilerini güncelleyebilir. Password doldurulduysa onu güncellemeliyim, sadece diğer alanları güncelliyorum.Neden tsql sorgumda yanlış?

Bunu ancak aşağıda hata oluştu:

Yordam veya işlev 'EditUserInfo' sağlanmadı parametresi '@ parola', bekliyor.

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 

bana yardım edebilir misiniz?

+1

yapmak '@ parola ikili = NULL' –

+0

Bu dize için çalışmaz, SP çağıran yaparken Şifre doğru değerini (veri türü) tedarik emin olun İkili = 'Şifre' OLARAK @pwd beyan –

cevap

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 parametresinden sonra "= NULL" ekleyebilirsiniz.

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