SQL语句最终都是字符,但是符合了一定得标准,因此可以被数据库引擎解析。
其中,有种写法很常见: where 1=1
这种恒等式,似乎没多大意义,实际上却可以做到简化拼写规则。很多程序,无论使用何种架构,最终都是在拼接sql语句。因此,对于一般的查询语句 select * from table where column='value'的写法中,可能很多时候不需要where,但是为了方法复用。
我们举例, 封装的程序层代码为 :
public static DateSet getList(string columnName, string tableName , string wheresql){
//其他逻辑
string sqlStr = string.format("select {0} from {1} where 1=1 {2}"
,columnName
,tableName
,wheresql);
//其他逻辑
}
参数解释:
columnName //查询列名,用于sql语句的 select 之后, from之前的部分;
tableName //表名,用于拼接sql语句的from之后,where 之前的部分;
wheresql //条件,用于拼接 where 1=1 之后的部分。
//这里where 1=1便发挥统一规范作用:所有拼接都要带and 或者or 关键字开头;
例子一:不需要条件
程序上看到的语句:select * from table
实际拼接后执行是:select * from table where 1=1
程序中调用方法: getList(“*”, "table" ,"")//查询所有列,表名为table,条件为空字符
例子二:需要一个条件
程序上看到的语句:select * from table where col1 = 'value1'
实际拼接后执行是:select * from table where 1=1 and col1 = 'value1'
程序中调用方法: getList(“*”, "table" ," and col1 = 'value1' ")//查询所有列,表名为table,条件为col1 = 'value1'
例子二:需要两个或者多个条件
程序上看到的语句:select * from table where col1 = 'value1' and col2 = 'value2'
实际拼接后执行是:select * from table where 1=1 and col1 = 'value1' and col1= 'value2'
程序中调用方法: getList(“*”, "table" ," and col1 = 'value1' and col1= 'value2' ")//查询所有列,表名为table,条件为col1 = 'value1' and col1=2 = 'value2'
原文地址:
https://www.opengps.cn/Blog/View.aspx?id=213
文章的更新编辑依此链接为准。欢迎关注源站原创文章!