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')。
我试图找到不同之处,但没有发现任何可能影响行为的东西:
- 两台服务器的排序规则相同 -
SQL_Latin1_General_CP1_CI_AS
- 语言相同 - 英语(美国)
- 服务器版本:本地为微软SQLServer 2017 Developer Edition (64-bit) v14.0.2027 RTM; REMOTE 是 Microsoft SQL Server 2017 Enterprise Edition: Core-based Licensing (64-bit) v14.0.1000 RTM
- 主机OS:本地是Windows 10 Pro; REMOTE 是 Windows Server 2016 Datacenter
有人可以解释一下,为什么我在本地收到错误消息?
这是一个客户端错误,因此您似乎是 运行 来自 SSMS 的查询,其中连接启用始终加密(列加密)选项(连接选项-->始终加密)远程客户端而不是产品服务器。启用该选项后,SSMS 客户端解析文字以便为 AE 构建参数。
与 '2019-12-12 00:00:00'
不同,ISO 8601 datetime format 文字 '2019-12-12T00:00:00'
是明确的,并且无论客户端区域设置如何都可以可靠地解析。
因此您的选择是使用 ISO 8601 日期时间格式或为连接打开 SSMS 启用 AE 选项。
当我在本地 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')。
我试图找到不同之处,但没有发现任何可能影响行为的东西:
- 两台服务器的排序规则相同 -
SQL_Latin1_General_CP1_CI_AS
- 语言相同 - 英语(美国)
- 服务器版本:本地为微软SQLServer 2017 Developer Edition (64-bit) v14.0.2027 RTM; REMOTE 是 Microsoft SQL Server 2017 Enterprise Edition: Core-based Licensing (64-bit) v14.0.1000 RTM
- 主机OS:本地是Windows 10 Pro; REMOTE 是 Windows Server 2016 Datacenter
有人可以解释一下,为什么我在本地收到错误消息?
这是一个客户端错误,因此您似乎是 运行 来自 SSMS 的查询,其中连接启用始终加密(列加密)选项(连接选项-->始终加密)远程客户端而不是产品服务器。启用该选项后,SSMS 客户端解析文字以便为 AE 构建参数。
与 '2019-12-12 00:00:00'
不同,ISO 8601 datetime format 文字 '2019-12-12T00:00:00'
是明确的,并且无论客户端区域设置如何都可以可靠地解析。
因此您的选择是使用 ISO 8601 日期时间格式或为连接打开 SSMS 启用 AE 选项。