在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
它是非常從未更好地使用遊標。 – HLGEM 2010-08-11 17:39:13