好吧,我花了一些時間研究這個,但似乎無法找到一個好的解決方案。如何使用表值參數進行條件JOIN?
我目前正在創建一個採用一組可選參數的存儲過程。存儲過程將充當多個表和列的「通用搜索查詢」。
存儲過程看起來是這樣的(請記住,這僅僅是一個精簡版和實際存儲的過程有更多的列等)
的「@ProductIdsParam intList中READONLY」是價值的示例表參數,如果它不是空的,我想加入。換句話說,查詢只能通過非空/空參數進行搜索。
調用該過程並解析其他參數的工作方式與此類似。然而,我可能誤解了,不應該像這樣做一個「通用搜索查詢」。
CREATE PROCEDURE [dbo].[usp_Search]
@ProductIdParam INT = NULL,
@CustomerNameParam NVARCHAR(100) = NULL,
@PriceParam decimal = NULL,
-- THIS IS WHAT I'D LIKE TO JOIN. BUT THE TABLE CAN BE EMPTY
@ProductIdsParam IntList READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT
CustomerTransactionTable.first_name AS FirstName,
CustomerTransactionTable.last_name AS LastName,
ProductTable.description AS ProductDescription,
ProductTable.price as ProductPrice
FROM dbo.customer AS CustomerTransactionTable
-- JOINS
LEFT JOIN dbo.product AS ProductTable
ON CustomerTransactionTable.product_id = ProductTable.id
WHERE
(ProductTable.id = @ProductIdParam OR @ProductIdParam IS NULL)
AND (CustomerTransactionTable.first_name = @CustomerNameParam OR @CustomerNameParam IS NULL)
AND (CustomerTransactionTable.price = @PriceParam OR @PriceParam IS NULL)
END
你也可以使用動態sql查詢 – Ravi