【问题标题】:SQL Server expecting different date formatSQL Server 期望不同的日期格式
【发布时间】:2015-12-13 07:04:50
【问题描述】:

我已将 SQL Server 的默认语言设置为“英国”。以下正确返回 23...

sp_configure 'default language'

我也将我的登录语言设置为“英国”...

 sp_defaultlanguage @loginame = 'Login123', @language = 'British'

但是,当我尝试将 13/12/2015 指定为 ASP Classic 中的 DateTime 存储过程参数时,我得到...

将数据类型 nvarchar 转换为日期时间时出错。

从 Management Studio 中,使用正确的登录名,它可以工作。

为什么 ASP Classic 会有这种效果?我很确定它使用了正确的连接字符串。

编辑:

它不是连接字符串。不知何故,日期的格式在发送到数据库之前被错误地转换。我可以从 Profiler 中看到这一点。

【问题讨论】:

  • 据我所知应该可以。你有更完整的例子吗?
  • 我已经更新了问题。
  • ASP经典是用同一个用户名登录服务器吗?据我记得,它也可能受到 IIS 中的语言设置的影响......
  • 我已将 IIS 中的 LCID 设置为 2057。例如,“Date()”具有正确的格式。
  • 如果我禁用登录,它根本不会让我登录。因此,它必须使用正确的登录名。

标签: sql-server asp-classic localization


【解决方案1】:

CONVERT 与样式一起使用:

英国/法国

103 = dd/mm/yyyy

SELECT CONVERT(DATETIME, '13/12/2015', 103);

-- with stored procedure
DECLARE @d DATETIME = CONVERT(DATETIME, '13/12/2015', 103);

EXEC [dbo].[my_stored_procedure] @d;


另一种方法是使用与文化无关的 ISO 8601 日期文字:

使用 ISO 8601 格式的优势在于它是一个国际标准。此外,使用此格式指定的日期时间值是明确的。 此外,此格式不受 SET DATEFORMAT 或 SET LANGUAGE 设置的影响。

yyyy-mm-ddThh:mm:ss[.mmm]

EXEC [dbo].[my_stored_procedure] '2015-12-13T00:00:00'

【讨论】:

  • 实际上,我已经意识到我正在做的事情确实有效,除非来自我的应用程序。也许 IIS 正在覆盖某些东西。
  • @IanWarburton 考虑使用 ISO8601,您的生活会轻松很多。
  • 我继承了一个旧的大型 ASP Classic 项目。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多