如何使用变量not null时的位置

时间:2015-04-12 06:38:46

标签: sql sql-server

当输入变量不为空时,我想使用where

例如,当@custid不为null时,请创建此查询:

Select * 
from customers 
where custid = @custid

@custid为null时,请改用此查询:

Select * 
from customers

我该怎么做?

我在谷歌搜索,但没有找到任何类似的答案。感谢

2 个答案:

答案 0 :(得分:4)

您可以使用以下查询:

Select * 
from customers 
where @custid IS NULL OR custid=@custid

在这种情况下,如果您的变量为空,则仅评估条件@custid IS NULL,并且您获得与Select * from customers相同的查询

如果您的变量不为null,则条件@custid IS NULL为false,您的查询与Select * from customers where custid=@custid相同

答案 1 :(得分:0)

我使用SqlBuilder类并提供以编程方式附加WHERE子句的过滤器。

所以SqlBuilder类看起来像这样:

public class Program
{
    public static void Main()
    {
        Console.WriteLine(SqlBuilder.GetSql(null));
        Console.WriteLine(SqlBuilder.GetSql("CUSTOMER_ID"));
    }

    public class SqlBuilder{

        private static string _baseSql = "select * from customers";

        public static string GetSql(string customerId){
            var final = _baseSql;
            if(customerId != null)
                final += " WHERE custId=@custId";
            return final;
        }
    }
}

这也可以通过使用参数和枚举来实现。