SQL存储过程空参数用于搜索项目

时间:2014-07-24 12:57:49

标签: sql sql-server stored-procedures

我正在创建一个用于搜索项目的SQL存储过程。我允许用户按项目代码或UPC搜索。因此,我需要能够允许我的参数为null。我想我已经关闭,但是,当我执行这个存储过程时,当我只期望一个存储过程时,它会返回太多结果。

以下是我所拥有的:

  @itm_ItemCode int,
  @itm_UPC varchar(11)

SELECT 
     ITEM_CODE as itm_itemcode 
    ,UPC_CODE as itm_upc
    ,[DESCRIPTION] as itm_description
    ,BASE_PRICE as itm_regularcost

FROM ITEM_TABLE 
    where (ITEM_CODE = @itm_ItemCode or @itm_ItemCode IS NULL) 
          OR (UPC_CODE = @itm_UPC or @itm_UPC IS NULL) 

以下是我尝试测试存储过程时对EXEC语句的一些示例:(这是我想要编写EXEC语句的方式吗?

EXEC stp_ItemSearch null, 71591010583
EXEC stp_ItemSearch 300, null

感谢您的帮助!

P.S。我使用的是SQL Server Manager

1 个答案:

答案 0 :(得分:2)

您的意思是and,而不是or

 where (ITEM_CODE = @itm_ItemCode or @itm_ItemCode IS NULL) 
      AND (UPC_CODE = @itm_UPC or @itm_UPC IS NULL)

您的两个示例都有一个参数null,因此将返回所有行。

如果Item_codeupc_code不可为空,那么您的代码可以缩短为

where (ITEM_CODE = ISNULL(@itm_ItemCode,ITEM_CODE ))
      AND (UPC_CODE = ISNULL(@itm_UPC,UPC_CODE ))