2011-05-10 60 views
2

我今天知道用户在MS SQL Server中定义的函数必须是确定性的 - 也就是说,您不能INSERTUPDATE或任何会改变环境的东西。因此,如果你有一个函数需要三个参数,并且一大堆慢速表格能够与它们一起工作,那么显而易见的事情可能就是在某处缓存这些结果。让函数返回已缓存的值(如果它足够近),并且在需要的情况下执行慢速烧录表工作。缓存用户定义函数的输出(ms sql服务器)

但是由于UDF内部不能INSERT,我无法缓存我的结果。我即将把这个缓存写入我的应用程序,但是真的没有办法使用SQL来完成同样的事情吗?

UPDATE

感谢,评论!

我想使用函数的结果作为查询条件。所以SP不会这样做。

具体来说,我有一个函数可以根据产品,状态,日期等来计算系统中“笔记”的数量。很多参数,但结果不会经常改变。或者我有一个函数,它接受一个字符串并根据一些计算返回一个表格 - 容易做一次,并且永远不会改变。

+2

您正在使用哪个数据库?一些数据库允许在sql本身中创建函数。否则,为什么你不能使用存储过程?请更具体地说明你正在努力实现的目标。 – 2011-05-10 19:51:22

+0

它们不必是确定性的(一个返回'getdate()'的函数是允许的,并且这不是确定性的)。他们不能有副作用。 – 2011-05-10 21:21:12

回答

1

你不能像你说的那样在函数中插入/更新,所以我认为一种不同的方法是按顺序的。你为什么不做一个你需要做的逻辑(存储过程)(使用你需要传入的所有参数)然后缓存它。这个SP也会有一个OUTPUT参数,它会返回你的'笔记'的数量。

然后,无论您需要调用该函数,都会为这些查询创建一个SP。现在,在SP中,您可以调用您制作的上一个SP,并将其返回给变量中的值,您可以将其作为任何查询的返回值。...

检查此OUTPUT参数语法(如果您还不知道):http://msdn.microsoft.com/en-us/library/ms378108(v=sql.90).aspx