通常我们会使用exec这个函数来实现一些动态的功能,因为它执行的一个字符串语句,可以通过在字符串中添加变量来实现动态的执行语句。例如:
exec( ' insert into tbl_back(costdept,sumtotalwork1,totalmoney1)'+
' select costdept,sum(sumtotalwork) as sumtotalwork,sum(totalmoney) as totalmoney '+
' from Rpt_WorkCostYear where and '+ @conditionstr+
' group by costdept'+
' order by costdept')[@more@]
可以通过对局部变量@month1和@conditionstr的动态赋值来实现语句的动态执行。但是这样书写的时候,往往没有办法利用到查询分析器的可以自动让关键字以不同颜色显示的这一功能来进行输入时的语法判定。因为字符串统统以红色显示,这样书写时很容易错写关键字,一个小技巧可以避免这样尴尬——在编写时这样写:exec('' insert into ……即在字符串开始的界定符“'”之前再加一个“'”以抵消掉字符串界定,这样的话后面的书写就仍然可以利用查询分析器的语法检测功能了,最终完成时再去掉那个多加的“'”即可。
在SQL中使用除法的时候要特别小心,当除号两边的数都是整数时,两个数相除的结果以整数显示,结果会将相除的小数部分去掉,保留下整数部分,例如:SELECT 1/4 AS NUM 结果是0而不是0.25,这在一些复杂的表达式中尤其容易被忽略——((SELECT SUM(totalwork) FROM EmpWorkData WHERE AND SUM(totalwork) FROM EmpWorkData WHERE AND (SELECT SUM(totalwork) FROM EmpWorkData WHERE AND )由于选择语句选出的结果为整数,所以,结果并不是像预期的那样为一个实数,通常的处理方法为让某个整数乘以一个1.0,系统运算的时候会自动的将运算中的所有数据自动转换为实数进行运算,最终结果也以实数显示。例如:select 1.0*1/4 as num返回的结果就是0.25。