我正在创建一个用于搜索项目的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
答案 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_code
和upc_code
不可为空,那么您的代码可以缩短为
where (ITEM_CODE = ISNULL(@itm_ItemCode,ITEM_CODE ))
AND (UPC_CODE = ISNULL(@itm_UPC,UPC_CODE ))