参数与宏的区别
参数与宏的区别,v5数据集和报表中经常会使用到参数和宏,这两者的区别再此总结一下。
区别一:书写方式不同
参数是以?或@为标识(其中复杂sql中书写参数时以?为标识,其他地方均为@),例如:
SELECT a,b FROM T WHERE xxx=10 AND yyy=?y
宏是以${XXX}为标识,例如:
select * from demo_orders where ${orders}
区别二:起作用方式不同
参数起作用的方式是将外界传入的值传给参数名,例如:SELECT a,b FROM T WHERE xxx=10 AND yyy=?y,传入参数值3后为:SELECT a,b FROM T WHERE xxx=10 AND yyy=3。其中动态参数是先计算表达式后,将计算的值传给参数名。总之,无论是普通参数还是动态参数,传入的都是一个计算好的值。
而宏起作用的方式是将宏的值直接替换sql中对应的标识,例如:select * from demo_orders where ${orders},宏的值为demo_orders.发货地区=华北,则会将宏的值直接替换${orders},结果为:select * from demo_orders where demo_orders.发货地区=华北。其中动态宏是先计算表达式后,将计算结果像普通宏一样,直接替换宏标识。总之,无论是普通宏还是动态宏,传入的都是一条字符串。
区别三:作用有所区别
参数的作用是通过为sql中传入条件值来实现数据的过滤功能,参数的作用仅限于此。
宏也可以向sql传入查询条件实现数据的过滤。
但宏还具有其他功能,例如使用通用查询的宏可以实现动态条件、动态表名等。
select * from demo_orders_${diqu}