2013-03-11 240 views
0

我正在使用sql server R2。我有一個存儲過程,其中我傳遞了兩個參數@username varchar(100)@password varchar(100)考慮在查詢中爲空字符串爲空

現在,當我從我的應用程序第一次創建用戶時,密碼將爲NULL。

我想做一個查詢,返回匹配用戶名和密碼的記錄。問題是代碼正在通過empty stringstored procedure。我想要自動考慮或轉換empty string to NULL的內容。我已經有這個解決方案使用if condition但我想使用單個查詢,而不是條件。

編輯:

它是一個簡單的存儲過程:

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條件。

+0

我們可以幫助,如果你告訴我們你的代碼。它是什麼樣子的? – JLRishe 2013-03-11 05:08:46

回答

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 Fiddle

+0

男人..看到下面..相同的答案是行不通的。 – Dev 2013-03-11 05:26:39

+0

@Dev:檢查小提琴,並告訴我你在哪裏面臨的問題? – 2013-03-11 05:35:12

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 
+0

@Dev工作嗎? – 2013-03-11 05:45:21

0

試試這個

alter PROCEDURE [dbo].[Pro_TblP] 
(
@userName varchar(100), 
@password varchar(100)='' 
) 
AS 
BEGIN 
    BEGIN 
     SELECT * FROM TblP 
     WHERE username = @userName AND IsNull(password,'')[email protected] AND IsDeleted = 0 
    END 
END 
+0

您在上述存儲過程中將密碼與參數@password進行比較,您在哪裏? – Dev 2013-03-11 05:33:42

+0

@Dev:更新它,從我的查詢分析器複製時是一個錯字 – 2013-03-11 05:35:22

+0

密碼存在的地方不起作用 – Dev 2013-03-11 05:43:29

0
SELECT * 
FROM TblP 
WHERE username = @userName AND 
     IsDeleted = 0 AND 
     (
     password = @password OR 
     password IS NULL AND @password = '' 
    )