制作一个仅在值不是 empty/null 时运行的 WHERE 函数
Making a WHERE function that only runs if value is not empty/null
所以我目前正在使用 C# 和 SQL 在 visual studio 2013 上做一些事情,我想制作一个表格,其中将有几个文本框用于输入每个 field/column 的搜索条件帮助更快地在数据库中查找记录。
用户可以根据需要向 fields/boxes 输入值。但是,我不确定如何为它编写 WHERE 语句。
我知道如果我执行 WHERE FirstName = '' 它什么也不会显示,这意味着我必须附加 WHERE。
我认为拥有类似
的东西不是一个好主意
public void QueryName(string FN, string LN,etc,etc)
"SELECT * FROM Table WHERE "
IF(FirstName != "") THEN
+ "FirstName = 'FN'" + IF(LastName != "") THEN
+ "LastName = 'LN'"
因为它会中断(我假设)如果它有一个 WHERE 后跟什么都没有,并且我无法将每个追加部分作为 "WHERE" 开始,因为用户决定它搜索的值。
所以我正在寻找的是一种使用用户选择的多个值在 C# 中创建 SQL 语句的方法,而不会比需要的更长和更复杂。
如果我让任何人感到困惑,我会尽力解释。
你可以这样做:
SELECT * FROM Table WHERE (FirstName = '' OR FirstName = @FirstName) AND (LastName = '' OR LastName = @LastName
这种方法可能会导致一些性能问题。
我更喜欢使用 C# 构建 sql 查询来识别用户想要应用的过滤器,例如:
var sql = "SELECT * FROM Table WHERE 1 = 1 /* Just to not care about if the where clause is needed */";
if (!String.IsNullOrWhiteSpace(FirstName))
{
sql += " AND FirstName = @FirstName ";
}
if (!String.IsNullOrWhiteSpace(LastName))
{
sql += " AND LastName= @LastName";
}
您可以使用这样的查询:
select * from YourTable a
where (isnull(@FirstName, '') = '' or a.FirtName = @FirstName) and
(isnull(@LastName, '') = '' or a.LastName = @LastName);
此代码 isnull(@FirstName, '') <> ''
将检查提供的值是否为 null,然后将其设为空,否则保持不变。然后检查它是否为空。因此,如果此条件通过,则它永远不会尝试与 FirstName
列进行比较。
所以我目前正在使用 C# 和 SQL 在 visual studio 2013 上做一些事情,我想制作一个表格,其中将有几个文本框用于输入每个 field/column 的搜索条件帮助更快地在数据库中查找记录。
用户可以根据需要向 fields/boxes 输入值。但是,我不确定如何为它编写 WHERE 语句。 我知道如果我执行 WHERE FirstName = '' 它什么也不会显示,这意味着我必须附加 WHERE。
我认为拥有类似
的东西不是一个好主意public void QueryName(string FN, string LN,etc,etc)
"SELECT * FROM Table WHERE "
IF(FirstName != "") THEN
+ "FirstName = 'FN'" + IF(LastName != "") THEN
+ "LastName = 'LN'"
因为它会中断(我假设)如果它有一个 WHERE 后跟什么都没有,并且我无法将每个追加部分作为 "WHERE" 开始,因为用户决定它搜索的值。
所以我正在寻找的是一种使用用户选择的多个值在 C# 中创建 SQL 语句的方法,而不会比需要的更长和更复杂。
如果我让任何人感到困惑,我会尽力解释。
你可以这样做:
SELECT * FROM Table WHERE (FirstName = '' OR FirstName = @FirstName) AND (LastName = '' OR LastName = @LastName
这种方法可能会导致一些性能问题。
我更喜欢使用 C# 构建 sql 查询来识别用户想要应用的过滤器,例如:
var sql = "SELECT * FROM Table WHERE 1 = 1 /* Just to not care about if the where clause is needed */";
if (!String.IsNullOrWhiteSpace(FirstName))
{
sql += " AND FirstName = @FirstName ";
}
if (!String.IsNullOrWhiteSpace(LastName))
{
sql += " AND LastName= @LastName";
}
您可以使用这样的查询:
select * from YourTable a
where (isnull(@FirstName, '') = '' or a.FirtName = @FirstName) and
(isnull(@LastName, '') = '' or a.LastName = @LastName);
此代码 isnull(@FirstName, '') <> ''
将检查提供的值是否为 null,然后将其设为空,否则保持不变。然后检查它是否为空。因此,如果此条件通过,则它永远不会尝试与 FirstName
列进行比较。