2014-07-24 99 views
1

我正在創建一個將用於搜索項目的SQL存儲過程。我允許用戶通過項目代碼或UPC進行搜索。因此,我需要能夠讓我的參數爲空。我認爲我很接近,但是,當我執行這個存儲過程時,當我期待只有一個時,它返回的結果太多了。SQL存儲過程用於搜索項目的空參數

這是我有:

@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 

謝謝您的幫助!

PS我使用SQL Server管理

+0

也許或外部()需要一個'和'。使用ITEM_CODE ='xyz'AND @itm_UPC爲NULL作爲示例...使用OR,則ITEM_CODE ='xyz'將返回並且所有itm_UPC都爲NULL也會返回。 OR意味着它可以是真實的,因爲它可以返回記錄。而且意味着它們都必須是真實的才能返回記錄。 – xQbert

回答

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)) 
+0

您好Podiluska!哦,我很尷尬,我錯過了一些簡單的事情!非常感謝你的幫助!!我很感激!! – user3281388