繁体   English   中英

SQL 服务器:如何编写包含每个条件不同查询的条件 WHERE 子句?

[英]SQL Server: How to write conditional WHERE clause containing different queries per condition?

我在 StackOverflow 上找到了一堆关于条件 WHERE 子句的答案,但我无法找到一个特定于我的问题的答案,所以只是寻求一点帮助......

我公司的网站包含直接在 C# 代码中编写的所有 SQL 查询(我不喜欢那个,但这是另一个故事)&我在尝试更新包含基于 WHERE 子句中的多个条件的查询时遇到问题用户在表单上选中的复选框。

提供者类型

表单中有一组复选框(目前有 3 个选项,但此列表可能会增长)。 对于选择的每个“提供者类型”,需要在 WHERE 子句中添加一个附加条件,但我不确定如何最好地处理这个问题。

这是处理此问题的代码。 ProviderTypesCSV最多可以包含 3 个值 (0,1,2),具体取决于用户检查的选项数量:

if (!String.IsNullOrEmpty(searchOptions.ProviderTypesCSV))
{
    // values are in a csv string.  Split out the csv
    var statuses = searchOptions.ProviderTypesCSV.Split(',');

    if (statuses.Contains("0"))   //Hospitals & Facilities
    {
        strSQL += " AND (<<perform query for 'Hospitals & Facilities'>>)";
    }

    if (statuses.Contains("1"))  //Physicians and Practitioners
    {
        strSQL += " AND (<<perform query for 'Physcians and Practitioners'>>)";
    }

    if (statuses.Contains("2"))   //In-Person Visit Providers
    {
        strSQL += " AND (<<perform query for 'In-Person Visit Providers'>>)";
    }
}

当前的问题显然是在选择多个选项时上述查询没有考虑到。 选择多个选项时,条件运营商需要为“或“,不是”和“”,但是我不确定如何在不弄乱的情况下最好地设置此设置并考虑到添加'L选项。

只是好奇设置它的最佳方法。

您可以定义一个字符串列表并添加您的条件,然后使用" OR "分隔符连接每个元素并将其用于您的AND

if (!String.IsNullOrEmpty(searchOptions.ProviderTypesCSV))
    {
        //values are in a csv string.  Split out the csv
        var statuses = searchOptions.ProviderTypesCSV.Split(',');
        
        List<string> conditions = new List<string>();

        if (statuses.Contains("0"))   //Hospitals & Facilities
        {
            conditions.Add("(<<perform query for 'Hospitals & Facilities'>>)");
        }
        if (statuses.Contains("1"))  //Physicians and Practitioners
        {
            sconditions.Add("(<<perform query for 'Physcians and Practitioners'>>)");
        }
        if (statuses.Contains("2"))   //In-Person Visit Providers
        {
            conditions.Add("(<<perform query for 'In-Person Visit Providers'>>)");
        }
        
        strSQL += " AND (" + String.Join(" OR ", list) + ") ";
        
    }

暂无
暂无

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

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