0

我正在使用sql server R2. 我有一个存储过程,其中我将两个参数传递为@username varchar(100)@password varchar(100)

现在,当我第一次从我的应用程序创建用户时,密码将为 NULL。

我想查询返回匹配用户名和密码的记录。问题是代码正在传递empty stringstored procedure. 我想要一些自动考虑或转换的东西empty string to NULL。我已经有了解决方案,if condition但我想使用单个查询,而不是 if 条件。

编辑 :

它是一个简单的存储过程:

CREATE PROCEDURE [dbo].[Pro_TblP]
(
 @userName varchar(100),
 @password varchar(100) 
)
AS
BEGIN
    IF (@password ='')
        BEGIN
            SELECT * FROM TblP 
            WHERE username = @userName AND password IS NULL AND IsDeleted = 0
        END

    ELSE 
        BEGIN
            SELECT * FROM TblP 
            WHERE username = @userName AND password = @password AND IsDeleted = 0
    END
END

GO

我想以单一表示形式组合查询。不想要 if 条件。

4

4 回答 4

1
CREATE PROCEDURE [dbo].[Pro_TblP]
(
 @userName varchar(100),
 @password varchar(100) 
)
AS
BEGIN
   SELECT * FROM TblP 
   WHERE username = @userName AND COALESCE(password,'') = @password AND IsDeleted = 0

END

GO

SQL小提琴

于 2013-03-11T05:24:22.740 回答
0

试试下面的代码:当@password 为空字符串或 null 时,它将返回所有值。当您在 @password 变量中传递一个字符串时,它将过滤它。

CREATE PROCEDURE [dbo].[Pro_TblP]
(
 @userName varchar(100),
 @password varchar(100) 
)
AS
BEGIN
     SELECT * FROM TblP 
         WHERE username = @userName AND IsDeleted = 0
         And (password = @password OR  isnull(@password,'') = '')           

END
于 2013-03-11T05:28:04.643 回答
0

试试这个

alter PROCEDURE [dbo].[Pro_TblP]
(
 @userName varchar(100),
 @password varchar(100)='' 
)
AS
BEGIN
   BEGIN
      SELECT * FROM TblP 
      WHERE username = @userName AND IsNull(password,'')=@password AND IsDeleted = 0
   END
END
于 2013-03-11T05:29:38.020 回答
0
SELECT *
FROM TblP 
WHERE username = @userName AND 
      IsDeleted = 0 AND
      (
        password = @password OR
        password IS NULL AND @password = ''
      )
于 2013-03-11T06:48:41.127 回答