7

我有以下程序界面:

Create procedure [dbo].[InsertItemDetails]
    @TimeItemAdded datetime

当我这样称呼它时:

EXEC [dbo].[InsertItemDetails]
     @TimeItemAdded = N'20/07/2012 00:00:00';

我收到此错误:

消息 8114,级别 16,状态 5
将数据类型 nvarchar 转换为日期时间时出错。

4

4 回答 4

15

根据您的区域设置,您传入的参数@TimeItemAdded可能无法识别。

您应该将日期传递为:

20120720
于 2012-07-25T14:09:33.960 回答
2

为您的日期使用明确的字符串文字。在这种情况下:

EXEC dbo.InsertItemDetails
    ...
    , @TimeItemAdded = '20120720';

更好的是,确保在您知道日期正确的地方传递强类型参数。理想情况下,这不应该以任何格式呈现为字符串。

像 m/d/y 这样的区域格式是个坏消息,因为鉴于用户的会话、日期格式、语言设置、机器上的区域设置等,您无法确保它们能够正常工作。

于 2012-07-25T14:11:10.090 回答
1

SQL 读取您的日期7/20/2012无效,您可以使用更安全的格式传递您的日期对象,yyyy-MM-dd例如:2012-07-20

于 2015-11-16T08:13:10.750 回答
0

这个链接有所有的日期时间格式,他们的 conntries http://www.sql-server-helper.com/tips/date-formats.aspx

您可以将其作为 varchar 传递,并使用正确的日期格式代码将其显式转换为日期时间。例如:

SELECT CONVERT(DATETIME, '20/07/2012 00:00:00', 103)

103 是您要查找的日期时间代码。

于 2012-07-25T14:18:13.243 回答