繁体   English   中英

将查询中的空字符串考虑为null

[英]Considering empty string to null in query

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

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

我想查询返回匹配用户名和密码的记录。 问题是代码将empty string传递给stored procedure 我想要一些考虑或自动将empty string to NULL转换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条件。

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小提琴

尝试下面的代码:@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

尝试这个

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
SELECT *
FROM TblP 
WHERE username = @userName AND 
      IsDeleted = 0 AND
      (
        password = @password OR
        password IS NULL AND @password = ''
      )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM