我的意思是如果我有两种方法来编写SQL查询:
将其作为存储过程写入SQL并从C#
在C#中构建查询然后执行查询,使其在我的数据库中不存在
哪个更好,为什么?
答案 0 :(得分:0)
“更好”是基于意见的。但有一些事实:
存储过程可以由数据库编译。这意味着你有语法检查。逗号丢失或字段输入错误?在存储过程中,这将产生编译时错误,在程序中它将是运行时错误。
程序中的SQL代码无法事先进行优化。对于数据库,程序中的语句是随机的。它可能被缓存,也许数据库足够智能,可以看到语句永远不会改变,但如果它在编译的存储过程中,它可以编译和准备。一旦编译。每次通话都不一次。
如果更改数据库,则存储过程将无效。就在那儿当场。很明显。如果程序中有代码,则用户在三周后单击按钮时可能会生成运行时错误。
将全部代码编写为开发人员更容易处理。
可能有更多的利弊。你必须对它们加权并自己决定。
修改强>
此问题已标记为sql-server,因此评论是合适的。请注意,我上面的答案是编程语言和DBMS不可知。他们描述了可以做什么。这篇文章发表时的MS-SQL是一个相当不错的DBMS,但还有其他几十年存在,并且比MS SQL更优化。 MS SQL可能不支持我正在谈论的那些功能。
如果将SQL放在代码中,从DBMS的角度来看,每次都是一个新的查询。它可以使用语句缓存来为其缓存机制范围内的每个调用优化它。但是,它永远无法告诉您每次都使用相同的语句,而是需要解析语句并明确地检查对所有它的缓存语句。如果将语句放在数据库中,DBMS就有机会来编译语句并使用一种机制,它不需要检查任何语句缓存,因为它知道这个说法是一样的。如果你愿意,这是解释语言和编译语言之间的区别。