如何为单个查询缓存函数的返回值

时间:2018-05-05 08:08:02

标签: sql sql-server database

我想在我的单个查询中使用getdate()函数3-4次进行验证检查。但是我希望每当我期望在单个查询执行中获得当前日期时间时,我在所有3-4个地方获得相同的日期。从技术上讲,计算机的速度并不快,99.9%的时间我会在查询的所有位置获得相同的日期时间。但理论上它可能会导致错误。那么如何通过调用一次来缓存getdate返回并在查询中使用缓存的值。

但是要添加,我想在check约束中写这样的语句,所以我不能声明局部变量,或任何这样的东西。

1 个答案:

答案 0 :(得分:0)

SQL Server具有运行时常量函数的概念。描述这些的最好方法是执行引擎所做的第一件事就是从查询计划中提取函数引用,并在每次查询时执行一次

请注意,函数引用似乎是基于的。因此,不同的列可以具有不同的值,但不同的行在列中应具有相同的值。

此类别中最常见的两个功能是getdate()rand()。具有讽刺意味的是,我发现这对getdate()来说是件好事,但rand()是一件坏事(什么样的随机数生成器总是返回相同的值?)。

由于某种原因,我找不到关于运行时常量函数的实际文档。但这里有一些受人尊敬的博客文章解释了这个问题: