带有非必需参数的SQL存储过程

时间:2010-08-13 16:05:18

标签: c# tsql

在我的应用程序中,我有一个包含一些过滤字段的表单。如果用户确实输入了我需要在where子句中作为参数提供的值,则无需任何操作。

我不知道如何在我的存储过程中处理这个问题。

例如以下存储过程:

--parameters
@customername varchar(50),

SELECT * from ORDERS
WHERE customername = @customername

因此,如果用户输入客户名称,那么它当然会返回所有客户名称,如果用户没有输入用户名,则需要返回所有客户名称。 我怎么能在这个声明中这样做?如果用户没有输入客户名称,我可以通过通配符吗?或者我需要一个单独的程序。 我希望这是有道理的,谢谢!

4 个答案:

答案 0 :(得分:4)

试试这个

--parameters
@customername varchar(50) = NULL,

SELECT * from ORDERS
WHERE customername = COALESCE(@customername, customername)

根据您需要返回null的客户名称的注释,这与Russ'。

集成
SELECT * from ORDERS
WHERE (customername = COALESCE(@customername, customername)
 OR customername IS NULL)

答案 1 :(得分:3)

SELECT * from ORDERS 
WHERE customername = @customername or @customername is null

答案 2 :(得分:1)

请参阅此链接以获取一些想法,以及条件where语句的不同方法的优缺点:

http://www.sqlservercentral.com/articles/T-SQL/61918/

答案 3 :(得分:-1)

您可以在存储过程中编写if语句。像这样。

IF @customername is null
BEGIN
  SELECT * FROM ORDERS
END
ELSE
BEGIN
  SELECT * FROM ORDERS WHERE customername = @customername
END