我今天知道用户在MS SQL Server中定义的函数必须是确定性的 - 也就是说,您不能INSERT
或UPDATE
或任何会改变环境的东西。因此,如果你有一个函数需要三个参数,并且一大堆慢速表格能够与它们一起工作,那么显而易见的事情可能就是在某处缓存这些结果。让函数返回已缓存的值(如果它足够近),并且在需要的情况下执行慢速烧录表工作。缓存用户定义函数的输出(ms sql服务器)
但是由于UDF内部不能INSERT
,我无法缓存我的结果。我即将把这个缓存写入我的应用程序,但是真的没有办法使用SQL来完成同样的事情吗?
UPDATE
感谢,评论!
我想使用函数的结果作为查询条件。所以SP不会这样做。
具体来说,我有一个函数可以根据产品,状态,日期等来计算系统中“笔记”的数量。很多参数,但结果不会经常改变。或者我有一个函数,它接受一个字符串并根据一些计算返回一个表格 - 容易做一次,并且永远不会改变。
您正在使用哪个数据库?一些数据库允许在sql本身中创建函数。否则,为什么你不能使用存储过程?请更具体地说明你正在努力实现的目标。 – 2011-05-10 19:51:22
它们不必是确定性的(一个返回'getdate()'的函数是允许的,并且这不是确定性的)。他们不能有副作用。 – 2011-05-10 21:21:12