0

nullでない場合は@campIdでフィルタリングし、nullの場合はすべてを返します

これはコンパイルされますが、意図したとおりに機能しません。

 declare @campId int
 select * 
 from cli 
 where 
    cu in (
        CASE @campId 
          when null then (select id from [dbo].[camp]) 
          else @campId 
        end) 
4

3 に答える 3

1

cuがnullにならない場合

where cu = isnull(@campid, cu)
于 2012-10-23T10:36:53.193 に答える
1

これを試して:

select * 
from cli
where
   cu in (select  isnull(@campId, id) from [dbo].[camp])

これは、selectfromcampがnullでない場合に@campIdを返すという事実を利用しています。

于 2012-10-23T10:37:19.747 に答える
0

単純にIFステートメントを使用してみませんか?

DECLARE @campId AS INT

IF (@campId IS NULL) BEGIN
      SELECT [Column1], [Column2], ...
      FROM [dbo].[cli] AS C1
        INNER JOIN [dbo].[Camp] AS C2 ON C2.[Id] = C1.[Cu]  
END
ELSE BEGIN
      SELECT [Column1], [Column2], ...
      FROM [dbo].[cli] AS
      WHERE [Cu] = @camp    
END
于 2012-10-23T10:36:41.790 に答える