SQL server:可选字段的where子句

时间:2013-06-12 09:59:18

标签: sql-server-2008

Track Id是我的应用程序中的可选字段。 情况1:如果我传递有效的轨道ID,它应该返回相应的行。 情况2:如果传递了无效的track id,则不应返回任何行。 情况3:如果没有传递跟踪ID,则应返回所有行

DECLARE @transaction_ID INT     
SELECT @transaction_ID = Transaction_ID FROM myTable WHERE TRACK_ID= @Track_Id 

我的条件是:

WHERE (@transaction_ID IS NULL OR myTable.Transaction_ID = @transaction_ID)            
  AND (amount<>0)  

符合上述条件1和3的情况正常。但第二个案件失败了。当我传递无效的曲目ID时,所有行都会返回。请更正查询以处理案例2.提前致谢。

2 个答案:

答案 0 :(得分:1)

继续查询@Track_ID

WHERE (
       (@transaction_ID IS NULL AND @Track_Id IS NULL) OR
       myTable.Transaction_ID = @transaction_ID)            
AND (amount<>0) 

(您希望NULL @Transaction_ID使WHERE子句成功的唯一情况是案例3.在案例2中,传递了非空@Track_Id但是@Transaction_ID将为NULL,因为没有返回任何行,因此我们正在尝试处理这种情况)

答案 1 :(得分:0)

尝试这样的事情

其中1 =(@TrackId = 1或TRACK_ID = @Track_Id然后1其他0结束时的情况)

如果您想要所有数据,则传递1,

当想要根据TrackID的数据传递@trackID值时 当你不想要应用的条件时传递null