好吧,我花了一些时间研究这个,但似乎无法找到一个好的解决方案。如何使用表值参数进行条件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