Sql server SQL Server datetime2解析问题

Sql server SQL Server datetime2解析问题,sql-server,sql-server-2017,Sql Server,Sql Server 2017,在本地SQL Server实例上运行以下SQL时: DECLARE @t DATETIME2 = '2019-12-12 00:00:00' 我得到以下错误: 无法将@t转换为System.Data.SqlClient.SqlParameter对象。指定的文字无法转换为DateTime2(System.Data.SqlDbType),因为它使用了不受支持的日期/时间格式。使用支持的日期/时间格式之一。文字值:2019-12-12 00:00:00 唯一的解决方法是在日期和时间之间添加“T” D

在本地SQL Server实例上运行以下SQL时:

DECLARE @t DATETIME2 = '2019-12-12 00:00:00'
我得到以下错误:

无法将@t转换为System.Data.SqlClient.SqlParameter对象。指定的文字无法转换为DateTime2(System.Data.SqlDbType),因为它使用了不受支持的日期/时间格式。使用支持的日期/时间格式之一。文字值:2019-12-12 00:00:00

唯一的解决方法是在日期和时间之间添加“T”

DECLARE @t DATETIME2 = '2019-12-12T00:00:00'
同时,这个脚本在我的生产服务器上运行得非常好(没有添加“T”)

我试图找出差异,但没有发现任何可能影响行为的因素:

  • 两台服务器上的排序规则相同-
    SQL\u Latin1\u General\u CP1\u CI\u AS
  • 语言相同-英语(美国)
  • 服务器版本:本地为Microsoft SQL Server 2017开发者版(64位)v14.0.2027 RTM;REMOTE是Microsoft SQL Server 2017企业版:基于核心的许可(64位)v14.0.1000 RTM
  • 主机操作系统:本地为Windows10Pro;远程是Windows Server 2016数据中心

有人能解释一下,为什么我会在本地收到错误吗?

这是一个客户端错误,因此您似乎正在使用远程客户端(而不是prod服务器)上的连接(连接选项-->始终加密)的启用始终加密(列加密)选项从SSMS运行查询。启用该选项后,SSMS客户端将解析文本,以便为AE生成参数

'2019-12-12 00:00:00'
不同,文本
'2019-12-12T00:00:00'
是明确的,可以可靠地解析,而不考虑客户端区域设置


因此,您可以选择使用ISO 8601日期时间格式,或者为连接启用SSMS AE选项。

如何执行该查询?从错误消息来看,您似乎有一个前端应用程序来执行它。请在您的问题中包括这一点:无法在SSMS中本地重现Win10/SQL Server 2017上的问题-工作正常。我同意@Squirrel:看起来你没有在SSMS中执行这项操作,但是从某个应用程序中——可能是该应用程序中的某些东西导致了这个问题。SQL Server本身应该是fine@Squirrel我在SSMS中运行它。多亏了丹·古兹曼,我们找到了原因和解决办法