2010-08-11 94 views
0

在SQL Server 2008中,我想創建一個存儲過程來選擇特定的產品,並將它們的ID作爲參數傳遞。SQL Server 2008 - 如何獲取具有特定範圍ID的記錄

但我打算帶來一系列的產品。

此範圍必須具有通知的productIds參數值(例如:1和8和29--即,範圍必須具有productId 1和productId 8和productId 29)。

不需要的範圍(如productId 1和productId 8,或productId 1和productId 29,或productId 8和productId 29)將不會顯示爲結果。

如何從我的查詢結果中篩選出那些不需要的範圍?

CREATE PROCEDURE [dbo].[ListProduct] 
(
    @categoryId 
    @productIds VARCHAR(4000) --Suppose we want to bring ONLY productIds 1 AND 8 AND 29 
) 
AS 
BEGIN 

    SELECT 

    category_id, 
    product_id, 
    product_name, 
    FROM Product 
    WHERE category_id = @category_id 
    AND productId = --... is it better to use a function? a cursor? 

END 

如果我們有

CategoryId 1  
    ProductId 2  
    ProductId 8 
    ProductId 20 
    ProductId 29 

CategoryId 2  
    ProductId 1  
    ProductId 3 
    ProductId 20 
    ProductId 29 

CategoryId 3  
    ProductId 1  
    ProductId 8 
    ProductId 20 
    ProductId 29 

其結果將是

CategoryId 1 | ProductId 1 
CategoryId 1 | ProductId 8 
CategoryId 1 | ProductId 29 
CategoryId 3 | ProductId 1 
CategoryId 3 | ProductId 8 
CategoryId 3 | ProductId 29 

這裏是我到目前爲止有:

CREATE TABLE #mylist(product_id int NOT NULL PRIMARY KEY) 
INSERT #mylist 
    SELECT Value FROM dbo.fn_split('1,8,29',',') 

SELECT category_id,product_id 
FROM Product 
WHERE product_id IN (SELECT product_id FROM #mylist) 

但是,有一個時產品ID缺少像8,此查詢顯示:

CategoryId 1 | ProductId 1 
CategoryId 1 | ProductId 8 
CategoryId 1 | ProductId 29 
CategoryId 2 | ProductId 1 --category2 should not be displayed, 
CategoryId 2 | ProductId 29 -- because product id 8 is missing.... 
CategoryId 3 | ProductId 1 
CategoryId 3 | ProductId 8 
CategoryId 3 | ProductId 29 
+0

它是非常從未更好地使用遊標。 – HLGEM 2010-08-11 17:39:13

回答

0

傳遞一個表變量作爲參數

相關問題