在编写sql语句时经常会遇到根据传入不同参数动态查询和排序的功能。
比如有一个美女表:beauties
字段如下:
---------height--------weight-----------face---------chest--------work--------------
分别是一个girl的各种指标
====================================查询================================================
当需要查询某个字段为一个特定值得时候,可以直接写sql语句加传入参数
比如传入参数@chest,查询chest为@chest的结果
可以写成:
select *
from beauties
where chest = @chest ---@chest 为传入参数;可变。
这样就可以完成操作了。
========================================排序=============================================
但是当要根据某一字段排序时
如果写成:
select *
from beauties
order by @chest
这样就不行了
因为当sql执行的时候@chest被当成一个参数而不是一个字段去执行
Oder by 需要的事一个字段所这样写是不行的
要想根据入参动态排序需要用拼接字符串的方法,这里使用C语言的写法:
先定义一个字符串变量@sql
然后:
snprintf(@sql, 16000,"%s \n %s", @sql, " select * ");
snprintf(@sql, 16000,"%s \n %s", @sql, " from beauties ");
snprintf(@sql, 16000,"%s \n %s%s", @sql, " order by ",@chest);
然后在执行@sql就可以了