2012-04-17 74 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 

希望这会有所帮助。