简体   繁体   English

使用传递多个值的条件的sql server

[英]sql server using where criteria for multiple values being passed

I am trying to pass from 1 to 10 criterias to a stored procedure that uses a select statement below in this procedure below: 我正在尝试将1到10条条件传递给在下面的此过程中使用以下select语句的存储过程:

ALTER PROCEDURE [dbo].[Original_Docs]  
@Cat varchar(255),
@docType VARCHAR(255),
@IdNo VARCHAR(50)

AS
BEGIN


SELECT 
    d4.id as DOCUMENT_ID, c.name as Category, dt.name as Document_Type, 
    mv1.value as GUIDELINE_MASTER, mv2.value as ID_NUMBER, mv3.value as [DATE],
    mv4.value as DESCRIPTION, mv5.value AS BUDGET_NUM, mv6.value as STATUS,
    mv7.value AS [CLOSED DATE], mv8.value AS REPORT_TYPE 
FROM Documents d4 
JOIN ( 
    SELECT d2.id 
    FROM Documents d2 
    JOIN (
        SELECT d.fileStoreId, MIN(d.createdDate) as CreatedDate 
        FROM Documents d 
        JOIN FileStores fs ON d.fileStoreId = fs.id 
        WHERE fs.shared = 1 AND d.dateDeleted IS NULL 
        GROUP BY d.fileStoreId
    ) AS f ON d2.fileStoreId = f.fileStoreId AND d2.createdDate = f.CreatedDate

    UNION 

    SELECT d3.id 
    FROM Documents d3 
    JOIN FileStores fs2 ON d3.fileStoreId = fs2.id 
    WHERE fs2.shared = 0 AND d3.dateDeleted IS NULL
) AS f2 ON f2.id = d4.id 
JOIN DocumentTypes dt ON d4.documentTypeId = dt.id 
JOIN Categories c ON dt.categoryId = c.id 
LEFT OUTER JOIN mv_guideline_master mv1 ON d4.id = mv1.documentId 
LEFT OUTER JOIN mv_id_number mv2 ON d4.id = mv2.documentId 
LEFT OUTER JOIN mv_date mv3 ON d4.id = mv3.documentId 
LEFT OUTER JOIN mv_description mv4 ON d4.id = mv4.documentId 
LEFT OUTER JOIN mv_budgetnum mv5 ON d4.id = mv5.documentId 
LEFT OUTER JOIN mv_status mv6 ON d4.id = mv6.documentId 
LEFT OUTER JOIN mv_closed_date mv7 ON d4.id = mv7.documentId 
LEFT OUTER JOIN mv_report_type mv8 ON d4.id = mv8.documentId 
WHERE c.name = @Cat AND (dt.name = @docType OR mv2.value = @IdNo) 
ORDER BY mv1.value 

I will need to add the rest of the other criteria after I figure out how to do it with 3 criteria. 在弄清楚如何用3条标准完成后,我将需要添加其他标准。 In the where clause, I am passing parameters @Cat, @docType, and @IdNo. 在where子句中,我传递了@ Cat,@ docType和@IdNo参数。 how do I query using these criteria with the one of these being filled in with the other one or 2 blank? 如何使用这些条件查询,其中一个用另一个或两个空白填充? Or if all of them where passed in or if only 2 were passed in. If I use AND then it doesn't work or if I use OR between the criteria, it will bring back the wrong result. 或者,如果所有这些都传入了,或者仅传入了2个。如果我使用AND,那么它不起作用,或者如果我在条件之间使用OR,它将带回错误的结果。 Do I need Parens somewhere for it to work? 我需要在某个地方使用Parens使其工作吗?

thanks! 谢谢!

Not sure I follow exactly, if each variable can be NULL: 如果每个变量都可以为NULL,则不确定我是否完全遵循:

WHERE (c.name = @Cat OR @Cat IS NULL) 
  AND ((dt.name = @docType OR @docType IS NULL)  
        OR (mv2.value = @IdNo OR @IdNo IS NULL)) 

or if blank: 或空白:

WHERE (c.name = @Cat OR @Cat = '') 
  AND ((dt.name = @docType OR @docType = '')  
        OR (mv2.value = @IdNo OR @IdNo = '')) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM