Sql server 创建一个用于创建用户定义函数的存储过程是一种好做法吗。。。?

Sql server 创建一个用于创建用户定义函数的存储过程是一种好做法吗。。。?,sql-server,stored-procedures,architecture,user-defined-functions,Sql Server,Stored Procedures,Architecture,User Defined Functions,我正在分析一位开发人员的SQL代码,我可能完全错了,但他们所做的事情对我来说并不好 该设计是为动态表达式生成器而设计的。使用几个表存储表达式,系统正常工作。我所关心的系统方面是,当存储表达式记录时,会调用一个存储过程,然后创建一个UDF,将整个表达式作为一个函数展开 这意味着,对于创建的每个唯一表达式,都会有一个唯一的UDF,可以运行它来执行该表达式。我假设这样做是为了缓存执行计划并提高性能,而不是每次构建动态sql并运行它 你们认为这是一个可以接受的解决方案吗?你需要更多的信息吗?这听起来像是

我正在分析一位开发人员的SQL代码,我可能完全错了,但他们所做的事情对我来说并不好

该设计是为动态表达式生成器而设计的。使用几个表存储表达式,系统正常工作。我所关心的系统方面是,当存储表达式记录时,会调用一个存储过程,然后创建一个UDF,将整个表达式作为一个函数展开

这意味着,对于创建的每个唯一表达式,都会有一个唯一的UDF,可以运行它来执行该表达式。我假设这样做是为了缓存执行计划并提高性能,而不是每次构建动态sql并运行它


你们认为这是一个可以接受的解决方案吗?你需要更多的信息吗?

这听起来像是给我带来灾难的秘诀。主要原因可能是,如果有人回去清理UDF(除非它们只使用一次,否则你的“执行计划”想法就失败了),软件就会失败。而且,如果你不清理,你会得到很多没有使用的杂物,特别是在很长一段时间之后


在进一步阅读时,听起来好像UDF以某种方式存储为元数据,这听起来好一点,但我不确定您是否节省了这么多,一旦您认为所有额外的杂波创建多个UDF创建。性能是个问题吗?

肯定需要更多信息。如果是我,我可能会研究CLR程序集,但这可能不是创建解决方案的团队的选择。哪个版本的SQL Server?该解决方案以何种方式用于其他应用程序?SQL Server 2008 R2。CLR可能不是一个可行的选择,因为在这位顾问离开后,没有人能够维护代码。在这一点上,我认为CLR是一种硬推销,但我同意它将是一个很好的选择。目前没有计划在其他应用程序中使用该解决方案。性能不是真正的问题。我刚刚与开发人员就他使用UDF的决定进行了长时间的讨论,结果这是报告作者所要求的一种支持。我不能说我100%理解这个道理,但你知道需求收集是如何进行的。我们有时会提出一些解决方案,在意识到这不是最好的方法后,这些解决方案会一直坚持下去,然后再也无法摆脱。这只是另一个让“如何”尽可能远离需求的原因。