参数与宏的区别

参数与宏的区别,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}

本文标签: