动态省略SQL中的条件

动态省略SQL中的条件,sql,gridview,case,Sql,Gridview,Case,我正在用Asp.net开发一个网站。我有一个问题,在下面的代码! 我想使用DataSqlSource,并将其附加到Gridview。我还有一个下拉列表,用于在该页面中进行分类。我想要的是,通过下拉列表对Gridview进行分类。在这种情况下,在一个条件中,必须从查询中省略一个条件(步骤3_AddArticleType.Status=@Status)。例如,当下拉列表值为“全部”时,所述条件不得计数。 有人能帮我吗 我不知道使用它的结构。以下是我的DataSqlSource中的代码: SELECT

我正在用Asp.net开发一个网站。我有一个问题,在下面的代码! 我想使用DataSqlSource,并将其附加到Gridview。我还有一个下拉列表,用于在该页面中进行分类。我想要的是,通过下拉列表对Gridview进行分类。在这种情况下,在一个条件中,必须从查询中省略一个条件(步骤3_AddArticleType.Status=@Status)。例如,当下拉列表值为“全部”时,所述条件不得计数。 有人能帮我吗

我不知道使用它的结构。以下是我的DataSqlSource中的代码:

SELECT  Step3_AddArticleType.ArticleType, Step3_AddArticleType.JournalName, Step5_AddTitle.FullTitle, Step3_AddArticleType.Status, Step3_AddArticleType.ArticleNum, 
Step5_AddTitle.ArticleID, Step3_AddArticleType.ID, Step3_AddArticleType.Date, CONVERT(VARCHAR(10), Step3_AddArticleType.Date, 103) AS SubmissionDate

FROM Step3_AddArticleType 
INNER JOIN Step5_AddTitle ON Step3_AddArticleType.ArticleID = Step5_AddTitle.ArticleID    
WHERE        (Step3_AddArticleType.CheckFinish = '0') 
AND (Step3_AddArticleType.JournalName = @JournalName) 
CASE 
WHEN @Status<>'All' THEN   
AND (Step3_AddArticleType.Status = @Status)    
END
选择Step3\u AddArticleType.ArticleType、Step3\u AddArticleType.JournalName、Step5\u AddTitle.FullTitle、Step3\u AddArticleType.Status、Step3\u AddArticleType.ArticleNum、,
步骤5\u AddTitle.ArticleID,步骤3\u AddArticleType.ID,步骤3\u AddArticleType.Date,将(VARCHAR(10),步骤3\u AddArticleType.Date,103)转换为提交日期
从步骤3\u添加ArticleType
步骤3上的内部联接步骤5\u AddTitle\u AddArticleType.ArticleID=步骤5\u AddTitle.ArticleID
其中(步骤3\u AddArticleType.CheckFinish='0')
和(步骤3_AddArticleType.JournalName=@JournalName)
案例
当@Status'All'时
和(步骤3_AddArticleType.Status=@Status)
结束

非常感谢您

您的
情况如下。将
置于检查全部和特定值之间:

WHERE (Step3_AddArticleType.CheckFinish = '0') AND (Step3_AddArticleType.JournalName = @JournalName)
AND (@Status = 'All' OR Step3_AddArticleType.Status = @Status)

谢谢,但我想要的是,当用户从下拉列表中选择“全部”时,Step3_AddArticleType.Status=@Status条件省略,当用户选择其他项目时,此条件保留。不幸的是,当我选择全部时,它不工作!这就是为什么您需要
。如果用户选择“全部”,则第一部分为真,因此整体为真。这就像省略了第二部分。你试过了吗?数据库中没有“全部”状态,但是,正如我前面提到的,它将通过下拉列表传递给查询!所以我们需要Status=@Status表示“所有”状态。通过这种方式,datasql源可以区分状态将来自下拉列表。@状态为用下拉列表填充!下拉列表包含数据库中除“全部”状态之外的所有状态。因此,对其他人进行分类很容易。但是数据库中没有的那个是我的问题!好的,但是如果用户选择了all,则必须在@Status参数中传递一些内容。这是怎么一回事?