Tsql 创建、存储和使用时间值

Tsql 创建、存储和使用时间值,tsql,sql-server-2008-r2,sql-update,Tsql,Sql Server 2008 R2,Sql Update,我不是SQL新手,但最近创建了一个表,其中包含一个定义为TIME的列。由于某些原因,我无法使此字段的值正好位于12 AM以下(23:59:99.999)。下面是我的简化TSQL DECLARE @Time TIME = '23:59:99.99999' UPDATE tblProjectSLA SET colSLATime = @Time WHERE SLAID IN ( 22, 24) 我得到以下错误: 味精241,第16级,状态1,第1行 从字符串转换日期和/或时间时,转换失败 我能够将时

我不是SQL新手,但最近创建了一个表,其中包含一个定义为
TIME
的列。由于某些原因,我无法使此字段的值正好位于12 AM以下(
23:59:99.999
)。下面是我的简化TSQL

DECLARE @Time TIME = '23:59:99.99999'
UPDATE tblProjectSLA
SET colSLATime = @Time
WHERE SLAID IN ( 22, 24)
我得到以下错误:

味精241,第16级,状态1,第1行
从字符串转换日期和/或时间时,转换失败

我能够将时间值设置为最低可能的时间“分辨率”,并且它成功地更新了字段

DECLARE @Time DATETIME = '23:59'
以下是查询SQL mgr时显示的结果:

colSLATime
23:59:00.0000000
我还尝试将字符串值转换为时间。。。同样的错误:

DECLARE @Time TIME = CAST('23:59:99.99999' AS TIME)
我觉得奇怪的是,表格的定义精度为16,刻度为7,难道我不能使用与表格中保存的值相近的值吗

下面是colSLATime列的定义方式。。。(使用sp_help命令并转换为更易于阅读)

如果有人能告诉我一个关于使用时间数据类型的细节的简单讨论。或者我应该废弃并在运行时使用一个VARCHAR字段并强制转换(估计不是这样)

那么,尝试使用:

23:59:59.99999
------^ this digit is pretty important!
而不是

23:59:99.99999
------^

一分钟99秒是不存在的

天哪。。。透过树林看不见森林!声明@Time Time='23:59:59.999999'已生效!谢谢你帮我澄清!
23:59:59.99999
------^ this digit is pretty important!
23:59:99.99999
------^