【发布时间】:2016-07-01 13:14:48
【问题描述】:
我正在构建一个存储过程,当我尝试插入数据时它失败了。这是插入:
INSERT INTO [AdminDB].[dbo].[DEFECTS_MAINTENANCE]([DATE], [Year], [Month], [Total])
SELECT
CONVERT(DATE, getdate()) AS 'Date',
DATENAME(yyyy, getdate()) AS 'Year',
DATENAME(mm, getdate()) AS 'Month',
COUNT([BG_BUG_ID]) AS 'Total'
FROM
[maint_maintenance_db].[td].[BUG]
WHERE
YEAR(DETECTION_DATE]) = YEAR(getdate())
AND MONTH([DETECTION_DATE]) = MONTH(getdate())
当我执行上面的代码时,我得到了这个错误:
消息 241,级别 16,状态 1,过程 usp_TC_TESTCYCL_ID_COUNT_PILOT_UCPATH,第 10 行
从字符串转换日期和/或时间时转换失败。
当我更改代码以使用 CAST 时,它可以工作,但不能正确返回值。下面是代码:
INSERT INTO [AdminDB].[dbo].[DEFECTS_MAINTENANCE]([DATE], [Year], [Month], [Total])
SELECT
CAST(getdate() AS Date),
CAST(getdate() AS datetime),
CAST(getdate() AS datetime),
COUNT([BG_BUG_ID]) AS 'Total'
FROM
[maint_maintenance_db].[td].[BUG]
WHERE
YEAR(DETECTION_DATE]) = YEAR(getdate())
AND MONTH([DETECTION_DATE]) = MONTH(getdate())
我怎样才能让它工作?任何帮助表示赞赏!
谢谢
【问题讨论】:
-
您是否尝试获取“MONTH name”或“MONth numer”?您的表 DEFECTS_MAINTENANCE 的列定义是什么
-
对于初学者,您在最后两列之间的
INSERT语句中缺少逗号。 -
DETECTION_DATE是什么数据类型? -
请发布 DEFECTS_MAINTENANCE 表的 DDL(定义)。似乎“年”或“月”列实际上是日期时间或其他东西。您正在将它们转换为有效的 INSERT 中的日期时间。您的 DATENAME 函数返回一个字符串 (NVARCHAR)。
标签: sql-server