计算字段失败,因为 ANSI_WARNINGS = OFF

问题描述 投票:0回答:1

我试图有一个自动计算的列来告诉我两个日期之间的小时数差异。

它不会让我这样做,因为数据库有

ANSI_WARNINGS = OFF

我知道最好的做法是设置

ANSI_WARNINGS ON
并处理问题,而不是试图隐藏它们,但是,我不是数据库的所有者,所以我需要尽我所能。

我也知道,如果删除“persisted”关键字,它会起作用,但我需要删除它在进行查询时产生的开销。

有什么方法可以调整我的计算列以允许其创建吗?

这是我的SQL语句:

ALTER TABLE TABLE_NAME 
    ADD DATE_DIFFERENCE 
        AS ROUND( (DATEDIFF(minute, DATETIME1, DATETIME2) / 60.00), 2) PERSISTED

我收到此错误:

ALTER TABLE 失败,因为以下 SET 选项设置不正确:“ANSI_WARNINGS”。验证 SET 选项是否正确用于索引视图和/或计算列上的索引和/或筛选索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作

sql sql-server calculated-columns datediff computed-field
1个回答
0
投票

简短回答“否” - 文档很清楚,当您在计算列或索引视图上创建或操作索引时,ANSI_WARNINGS 必须为 ON。

如果您不是数据库的所有者并且无法更改 ANSI_WARNINGS 设置,那么您就无法执行此操作 - 因此您需要考虑其他方法来完成此操作。你可以调查例如表上的触发器只是简单地设置“正常”(未计算)列的值,或者您可能有一个计划作业定期(例如每小时)更新该列 - 这取决于您的需求你没有详细说明 - 所以我真的不能推荐任何东西

© www.soinside.com 2019 - 2024. All rights reserved.