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

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

ただし、@Name = NULLは正しくないため、ストアド プロシージャは、入力Nameが Nullであったか、実行しないか、Name IS NULLまたはName = '<value>'

これを回避する簡単な方法は何ですか?

このようなことができると思いますが、もっと簡単な方法はありませんか?

IF @Name IS NULL 
BEGIN 
  SELECT * FROM TABLE WHERE NAME IS NULL AND AGE=@AGE
END
ELSE
BEGIN
  SELECT * FROM TABLE WHERE NAME=@NAME AND AGE=@AGE
END
4

4 に答える 4

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

 SELECT * FROM TABLE WHERE (Name = @Name OR COALESCE(Name, @Name) IS NULL) and Age = @Age
于 2012-04-18T00:00:30.517 に答える
1

name = @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

お役に立てれば。

于 2012-04-18T02:52:54.993 に答える
1

次のように変更Name = @Nameします。

( Name = @Name OR Name IS NULL AND @Name IS NULL )
于 2012-04-18T00:00:18.910 に答える
0
SELECT * FROM TABLE WHERE ISNULL(NAME,'')=ISNULL(@NAME,'') AND AGE=@AGE
于 2012-04-18T00:48:34.330 に答える