小编Ast*_*tor的帖子

SQL Server 2016 突然产生 Error:402,State:1,Class:16 用 DATETIME/DATE/TIME 算法更新 sproc,这在之前很好

在其中一个存储过程中,我需要捕获实时事件的持续时间。保证永远不会超过 24 小时,因此结果列的数据类型选择为TIME(3)(映射到TimeSpan应用程序端)。计算过程如下:

update tbEvent set tWait= @dtEvent - dEvent - tEvent [where idEvent = @idEvent]
Run Code Online (Sandbox Code Playgroud)

此处dEventtEvent先前设置为dtEvent(原始事件@dtEvent的时刻)的日期和时间部分,并且是后续关闭事件的时刻。因此,我从 DATETIME 变量中减去 DATE 和 TIME 列值,并将结果填充到 TIME 列中。

[合理吗?] 预期行为: SQL 将每个表达式项隐式转换为 DATETIME,执行减法,然后通过简单地删除 DATE 部分将结果隐式转换为 TIME这一直有效! 嗯, - 到目前为止..


一个更新脚本突然在 SQL 2016 (13.0.1742.0) 上产生了一个错误

System.Data.SqlClient.SqlException (0x80131904):
    The data types datetime and date are incompatible in the subtract operator.
    Error Number:402,State:1,Class:16
Run Code Online (Sandbox Code Playgroud)

但是相同的脚本在 2008 R2 (10.50.2500.0) 和 2019 (15.0.2080.9) 上运行良好! …

sql-server t-sql datetime date sql-server-2016

4
推荐指数
1
解决办法
119
查看次数

标签 统计

date ×1

datetime ×1

sql-server ×1

sql-server-2016 ×1

t-sql ×1