直接插入或通过存储过程插入

时间:2011-03-17 08:50:31

标签: c# sql-server-2005 tsql stored-procedures

我正在为我的应用程序使用sql server和winforms。通过按下表单上的按钮,数据将每分钟插入到数据库表中。

为此,我使用INSERT查询。

但是如果我创建一个过程并在其中包含相同的插入查询,那么它会更有效,那会有什么不同呢?

4 个答案:

答案 0 :(得分:3)

使用存储过程更安全

答案 1 :(得分:3)

存储过程通常会更快,因为存储了查询计划,并且不需要为每个调用创建存储过程。如果这是一个简单的插入,差异将是最小的。

存储过程可以使用执行权限运行,这比向用户提供插入权限更安全。

答案 2 :(得分:2)

这取决于'有效'的含义。

  • 执行时间 - 如果您每隔几秒钟只保存到数据库,那么SP和INSERT之间的任何速度差异都很可能无关紧要。如果卷量特别高,您可能会在服务器上设置类似命令队列的内容,然后再在此级别进行微调。
  • 开发时间
    • 使用INSERT意味着您可以直接在代码库中(在存储库或类似代码中)编写SQL。我已经看到被描述为设计不佳,但我认为只要您对查询进行集成测试就没有真正的问题
    • 存储过程可能更难维护 - 您需要制定将新SP部署到数据库的计划。好处是您可以在数据库本身上实现更细粒度的安全性(如@ b-rain和@mark_s所说)并且很容易在SP中的INSERT和UPDATE之间做出决定,而在代码中执行相同操作意味着确保假设。

我个人(目前)使用内联SQL进行查询和删除,以及用于插入的存储过程。我有一个脚本和一组迁移文件,我可以对生产数据库运行以部署表和SP更改,这似乎工作得很好。我还围绕内联SQL和SP调用进行了集成测试。如果你使用内联SQL,你肯定应该使用参数化查询,它有助于防止SQL注入攻击,它也更容易阅读和编程。

答案 3 :(得分:1)

如果您的DBA甚至允许您在没有存储过程的情况下执行此操作,我会非常怀疑......