将if else子句放在where sql中

时间:2014-09-16 04:23:11

标签: sql sql-server sql-server-2008 where-clause

我是初学者,也是第一次使用sql程序。如果用户没有给参数赋值,它将返回所有项。但我试图根据用户输入添加更多where子句。我知道在sql过程中有if-else语句,但我不知道是否可以追加更多条件。

这是声明

@FirstName varchar (50)
AS
SELECT distinct [user_identity], [first name], 
[last name], email, Name, orderdate,RenewalCount, RenewalDate

FROM 
db.[dbo].Users,
db.[dbo].[Order],
db.[dbo].[Subscription],
db.[dbo].[Products],
db.[dbo].[Order_Details]


WHERE 
db.[dbo].Users.user_identity = db.[dbo].Subscription.userid AND
db.[dbo].Users.user_identity = db.[dbo].[Order].userid AND
db.[dbo].[Order].Orderid = db.[dbo].[Order_Details].OrderId AND  
db.[dbo].Products.ProductId = db.[dbo].[Order_Details].Productid AND
db.[dbo].[Order_Details].OD_Id = db.[dbo].[Subscription].OD_Id



//if @firstname is not null and not empty
//append where clause condition
//AND db.[dbo].Users.[first name] = @FirstName

提前致谢!

2 个答案:

答案 0 :(得分:1)

你的条件应该是这样的:

WHERE 
db.[dbo].Users.user_identity = db.[dbo].Subscription.userid AND
db.[dbo].Users.user_identity = db.[dbo].[Order].userid AND
db.[dbo].[Order].Orderid = db.[dbo].[Order_Details].OrderId AND  
db.[dbo].Products.ProductId = db.[dbo].[Order_Details].Productid AND
db.[dbo].[Order_Details].OD_Id = db.[dbo].[Subscription].OD_Id AND
(@FirstName IS NULL OR @FirstName = '' OR db.[dbo].Users.[first name] = @FirstName)

答案 1 :(得分:0)

在你的where条件下附加条件

where  @FirstName=case when isnull(@firstname,'')<>'' then db.[dbo].Users.[first name] else  @FirstName end