将sql查询编写为存储过程或将其写入C#并动态执行是否更好?

时间:2014-01-11 08:10:48

标签: c# sql sql-server c#-4.0

我的意思是如果我有两种方法来编写SQL查询:

  1. 将其作为存储过程写入SQL并从C#

  2. 执行
  3. 在C#中构建查询然后执行查询,使其在我的数据库中不存在

  4. 哪个更好,为什么?

1 个答案:

答案 0 :(得分:0)

“更好”是基于意见的。但有一些事实:

存储过程可以由数据库编译。这意味着你有语法检查。逗号丢失或字段输入错误?在存储过程中,这将产生编译时错误,在程序中它将是运行时错误。

程序中的SQL代码无法事先进行优化。对于数据库,程序中的语句是随机的。它可能被缓存,也许数据库足够智能,可以看到语句永远不会改变,但如果它在编译的存储过程中,它可以编译和准备。一旦编译。每次通话都不一次。

如果更改数据库,则存储过程将无效。就在那儿当场。很明显。如果程序中有代码,则用户在三周后单击按钮时可能会生成运行时错误。

将全部代码编写为开发人员更容易处理。

可能有更多的利弊。你必须对它们加权并自己决定。

修改

此问题已标记为,因此评论是合适的。请注意,我上面的答案是编程语言和DBMS不可知。他们描述了可以做什么。这篇文章发表时的MS-SQL是一个相当不错的DBMS,但还有其他几十年存在,并且比MS SQL更优化。 MS SQL可能不支持我正在谈论的那些功能。

如果将SQL放在代码中,从DBMS的角度来看,每次都是一个新的查询。它可以使用语句缓存来为其缓存机制范围内的每个调用优化它。但是,它永远无法告诉您每次都使用相同的语句,而是需要解析语句并明确地检查对所有它的缓存语句。如果将语句放在数据库中,DBMS就有机会来编译语句并使用一种机制,它不需要检查任何语句缓存,因为它知道这个说法是一样的。如果你愿意,这是解释语言和编译语言之间的区别。