|
在查询之前,先用程序判断页面中的哪些条件不为空,可乎? 添加where 1=1 ^_^ sql = "select * from T_USER where 1=1 " if(!String.IsNullOrEmpty(txtUserLoginName.Text)){ sql += " and USER_LOGIN_NAME = " + txtUserLoginName.Text; } if(!String.IsNullOrEmpty(txtUserNickName.Text)) sql += " and USER_NICK_NAME = " + txtUserNickName.Text; } if(!String.IsNullOrEmpty(txtBirthday.Text)) sql += " and BIRTHDAY = " + txtBirthday.Text; } 丁学的方法就可以。 select * from T_USER where USER_LOGIN_NAME like '%@变量%' or USER_NICK_NAME like '%@变量%' or BIRTHDAY =@变量 一条语句就可以了 就这么简单 SELECT * FROM T_USER WHERE (@USER_LOGIN_NAME IS NULL OR USER_LOGIN_NAME = @USER_LOGIN_NAME) AND ( (@USER_NICK_NAME IS NULL OR USER_NICK_NAME = @USER_NICK_NAME) ) AND ( (@BIRTHDAY IS NULL OR BIRTHDAY = @BIRTHDAY) ) 丁学的不錯,不過我認為 1=1是多余的,可能影響性能 |
|
2周前 丁学 : to @yeyang: 典型的累死数据库不偿命做法~~~~~~~~~ |
|
1周前 丁学 : to jimeper: 1=1对查询没有影响或者说可以忽略不记,无论是什么数据和语句 没有1=1的话后面的SQL不好拼,因为不知道到哪个语句才会出现,所以也就不知道and要怎么加 |
|
1周前 rex xiang : 丁学方法个人不太推荐, 拼凑SQL语句, 不是参数化的查询, 首先就不便于阅读和维护, 而且通常每次提交执行SQL语句都不一样, 数据库引擎应该不会缓存. 我的做法, 性能上没什么太明显的损失, 在WHERE中, @USER_LOGIN_NAME IS NULL, @USER_NICK_NAME IS NULL, @BIRTHDAY IS NULL等等对参数值的判断, 几乎不会有什么性能损耗. |