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