我有以下程序界面:
Create procedure [dbo].[InsertItemDetails]
@TimeItemAdded datetime
当我这样称呼它时:
EXEC [dbo].[InsertItemDetails]
@TimeItemAdded = N'20/07/2012 00:00:00';
我收到此错误:
消息 8114,级别 16,状态 5
将数据类型 nvarchar 转换为日期时间时出错。
我有以下程序界面:
Create procedure [dbo].[InsertItemDetails]
@TimeItemAdded datetime
当我这样称呼它时:
EXEC [dbo].[InsertItemDetails]
@TimeItemAdded = N'20/07/2012 00:00:00';
我收到此错误:
消息 8114,级别 16,状态 5
将数据类型 nvarchar 转换为日期时间时出错。
根据您的区域设置,您传入的参数@TimeItemAdded
可能无法识别。
您应该将日期传递为:
20120720
为您的日期使用明确的字符串文字。在这种情况下:
EXEC dbo.InsertItemDetails
...
, @TimeItemAdded = '20120720';
更好的是,确保在您知道日期正确的地方传递强类型参数。理想情况下,这不应该以任何格式呈现为字符串。
像 m/d/y 这样的区域格式是个坏消息,因为鉴于用户的会话、日期格式、语言设置、机器上的区域设置等,您无法确保它们能够正常工作。
SQL 读取您的日期7/20/2012
无效,您可以使用更安全的格式传递您的日期对象,yyyy-MM-dd
例如:2012-07-20
这个链接有所有的日期时间格式,他们的 conntries http://www.sql-server-helper.com/tips/date-formats.aspx
您可以将其作为 varchar 传递,并使用正确的日期格式代码将其显式转换为日期时间。例如:
SELECT CONVERT(DATETIME, '20/07/2012 00:00:00', 103)
103 是您要查找的日期时间代码。