SQL Server:在SQL Server中设置日期,但保持确定性

Tom*_*lak 6 sql sql-server indexing deterministic sql-server-2000

(这与在SQL服务器中建立日期相关.)

DATETIME是否存在确定性表达式?当我将其用作计算列公式时:

DATEADD(dd, DATEDIFF(dd, 0, [datetime_column]), 0)
Run Code Online (Sandbox Code Playgroud)

我在该列上放置索引时出错:

无法创建索引,因为键列'EffectiveDate'是非确定性的或不精确的.

但根据定义,DATEDIFF和DATEADD都是确定性函数.捕获量在哪里?可能吗?

Tom*_*m H 3

我的猜测是这是某种错误。在 SQL 2005 中,我能够毫无问题地创建这样的索引视图(代码如下)。当我尝试在 SQL 2000 上运行它时,我得到了与您相同的错误。

以下内容似乎适用于 SQL 2000,但我收到一条警告,指出索引将被忽略,并且每次从视图中选择时都必须进行转换。

CONVERT(CHAR(8), datetime_column, 112)
Run Code Online (Sandbox Code Playgroud)

在 SQL 2005 中工作:

CREATE TABLE dbo.Test_Determinism (
    datetime_column DATETIME    NOT NULL    DEFAULT GETDATE())
GO

CREATE VIEW dbo.Test_Determinism_View
WITH SCHEMABINDING
AS
    SELECT
        DATEADD(dd, DATEDIFF(dd, 0, [datetime_column]), 0) AS EffectiveDate
    FROM
        dbo.Test_Determinism
GO

CREATE UNIQUE CLUSTERED INDEX IDX_Test_Determinism_View ON dbo.Test_Determinism_View (EffectiveDate)
GO
Run Code Online (Sandbox Code Playgroud)