我的程序有如下功能放存储过程:
1、复杂的条件查询。
2、所有的报表。
3、一些字段很多的的插入和更新。有朋友建议我,把1,3放代码里面。
因为他觉得代码可能里面可能比存储过程更安全。
因为存储过程出错不能报错。请问,这个观点是否正确,存储过程执行能够监视,怎么监视。存储安全报表

解决方案 »

  1.   


    插入和更新,直接放代码就行了。 
    复杂的条件查询,通常也可以使用前台代码来实现逻辑。代码比存储过程更安全,这个是基于sql注入说的。做好注入的防范,应该是没有问题的。
    另外,存储过程不能报错,这个就看你怎么用了try catch的方式,通常可以报出一些错误,但是逻辑上的问题,比如没有对应物品价格等等,需要写一些附加代码来实现。监视角度讲,存储过程没有直接监控语句来的直接,但会代码新能的提升,高度集成的优势。这个就是取舍之间的事儿了。lz自己斟酌吧。参考
      

  2.   

    我们Web程序现在全部都用存储过程了,包括查询也是,这样速度快,而且防止SQL注入了。
    建议全部用存储过程了
      

  3.   

    1、复杂的条件查询。
    2、所有的报表。
    3、一些字段很多的的插入和更新。看你用什么语言开发,如果用JAVA,直接用ORM工具来完成插入与更新,毕竟把一些业务逻辑写在存储过程中,不太符合面向对象的。
    复杂的查询条件查询,我建议写一个通用的存储过程,将查询条件作为参数传递进去。
    报表就建议你放在存储过程,这样一旦报表有修改,可以直接改脚本,不用改报表本身的代码。
      

  4.   

    关于存储过程的内部错误监控的问题,可以使用try catch,向ErrorLog表加入数据。
    示例代码不但可以在sql server 2008的联机丛书中找到,而且示例数据库中也是有的,你可以参考下AdventureWorks示例数据库中的:
    表:dbo.ErrorLog——用于记录错误日志;
    过程:dbo.uspLogError——用于向日志表中加入数据;
    dbo.uspPrintError——用于输出错误信息到界面;
    以及一个使用了上述对象的过程,里面有过程的基本结构:
    HumanResources.uspUpdateEmployeeHireInfo