首页 > 解决方案 > 如何为单个查询缓存函数的返回值

问题描述

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

但要补充一点,我想在检查约束中写这样的语句,所以我不能声明局部变量,或者任何这样的东西。

标签: sqlsql-serverdatabase

解决方案


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

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

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

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


推荐阅读