2012-04-17 77 views
0
[dbo].[StoreProc1] 
(
@Name varchar(10) = NULL, 
@Age int 
) 

SELECT * FROM TABLE WHERE Name = @Name and Age = @Age 

然而,由於@Name = NULL是不正確的,存儲過程並不知道是否爲Name輸入爲空或不是做Name IS NULLName = '<value>'使用在WHERE語句爲NULL

什麼是快速工作 - 在這附近?

我想我可以做這樣的事情,但沒有更簡單的方法嗎?

IF @Name IS NULL 
BEGIN 
    SELECT * FROM TABLE WHERE NAME IS NULL AND [email protected] 
END 
ELSE 
BEGIN 
    SELECT * FROM TABLE WHERE [email protected] AND [email protected] 
END 

回答

4
[dbo].[StoreProc1] 
(
@Name varchar(10) = NULL, 
@Age int 
) 

SELECT * FROM TABLE WHERE (Name = @Name OR COALESCE(Name, @Name) IS NULL) and Age = @Age 
1

更改Name = @Name到:

(Name = @Name OR Name IS NULL AND @Name IS NULL) 
0
SELECT * FROM TABLE WHERE ISNULL(NAME,'')=ISNULL(@NAME,'') AND [email protected] 
+0

這有一個問題,即NULL和''在Name/@ Name中被等價處理 – 2012-04-18 02:25:58

1

假設你想要得到的結果時,名稱= @Name或者當它們都爲null,那麼我會與去以下。

[dbo].[StoreProc1] 
(
@Name varchar(10) = NULL, 
@Age int 
) 

SELECT * 
    FROM TABLE 
    WHERE (Name = @Name 
     OR (Name IS NULL AND @Name IS NULL)) 
    AND Age = @Age 

希望這會有所幫助。