SQL 服务器 datetime2 解析问题

SQL Server datetime2 parse issue

当我在本地 SQL 服务器实例 运行 以下 SQL 时:

DECLARE @t DATETIME2 = '2019-12-12 00:00:00'

我收到以下错误:

Unable to convert @t to a System.Data.SqlClient.SqlParameter object. The specified literal cannot be converted to DateTime2(System.Data.SqlDbType), as it used an unsupported date/time format. Use one of the supported date/time formats. Literal value: 2019-12-12 00:00:00

解决它的唯一方法是在日期和时间

之间添加 'T'
DECLARE @t DATETIME2 = '2019-12-12T00:00:00'

同时,此脚本 运行 在我的生产服务器上完全正常(无需添加 'T')。

我试图找到不同之处,但没有发现任何可能影响行为的东西:

有人可以解释一下,为什么我在本地收到错误消息?

这是一个客户端错误,因此您似乎是 运行 来自 SSMS 的查询,其中连接启用始终加密(列加密)选项(连接选项-->始终加密)远程客户端而不是产品服务器。启用该选项后,SSMS 客户端解析文字以便为 AE 构建参数。

'2019-12-12 00:00:00' 不同,ISO 8601 datetime format 文字 '2019-12-12T00:00:00' 是明确的,并且无论客户端区域设置如何都可以可靠地解析。

因此您的选择是使用 ISO 8601 日期时间格式或为连接打开 SSMS 启用 AE 选项。