Sql 无法构造数据类型datetime,某些参数的值无效
我在下面的代码中得到这个错误; Msg 289,16级,状态3,第2行 无法构造数据类型datetime,某些参数的值无效 但我认为价值观是有效的Sql 无法构造数据类型datetime,某些参数的值无效,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在下面的代码中得到这个错误; Msg 289,16级,状态3,第2行 无法构造数据类型datetime,某些参数的值无效 但我认为价值观是有效的 MERGE INTO tblAveraj WITH (HOLDLOCK) USING tblDegerSon ON (tblAveraj.AdresID = tblDegerSon.AdresID AND tblAveraj.Baslangic = DATETIMEFROMPARTS(2014, 11, 11, 11, 0, 0,
MERGE INTO tblAveraj WITH (HOLDLOCK)
USING tblDegerSon ON
(tblAveraj.AdresID = tblDegerSon.AdresID
AND tblAveraj.Baslangic = DATETIMEFROMPARTS(2014, 11, 11, 11, 0, 0, 0))
WHEN MATCHED
THEN
UPDATE
SET tblAveraj.Toplam = tblAveraj.Toplam + tblDegerSon.Deger,
tblAveraj.Sure = tblAveraj.Sure + 1
WHEN NOT MATCHED
THEN
INSERT (AdresID, Baslangic, Bitis, Toplam, Sure)
VALUES (
tblDegerSon.AdresID,
DATETIMEFROMPARTS(DATEPART(YEAR, GETDATE()),
DATEPART(MONTH, GETDATE()),
DATEPART(DAY, GETDATE()),
DATEPART(HOUR, GETDATE()), 0, 0, 0),
DATETIMEFROMPARTS(DATEPART(YEAR, GETDATE()),
DATEPART(MONTH, GETDATE()),
DATEPART(DAY, GETDATE()),
DATEPART(HOUR, GETDATE()) + 1, 0, 0, 0),
Deger, 1);
我能看到的唯一原因是,
列的INSERT部分中的最后一个DATETIMEFROMPARTS是
(如果我读得正确的话):
当小时数+1超过24时溢出
做:
SELECT DATETIMEFROMPARTS(DATEPART(YEAR, GETDATE()), DATEPART(MONTH, GETDATE()), DATEPART(DAY, GETDATE()), DATEPART(HOUR, GETDATE()) + 2, 0, 0, 0)
现在(我的当地时间是2014-11-23 22:53:49.383
)给了我同样的错误
快速修复方法是在DATEPART(HOUR,GETDATE())+1>24时执行
情况,然后0结束
或类似的操作。使用DATETIMEFROMPARTS时会出现这些类型的错误
如果我向上述函数传递了一个无效参数到DATETIMEFROMPARTS
ex(一个月内的天不能是32,一天内的小时不能是25)。因此,此函数的构造函数无法根据这些参数创建日期,因此会生成错误
每当遇到此错误时,请检查函数中传递的参数。参数必须有效才能避免此错误
简而言之,DATETIMEFROMPARTS
函数将有效整数作为年、月、日期和小时的输入。它返回一个表示零件的日期变量。任何空输入值都会导致空输出值。最后但并非最不重要的一点是,任何无效输入都会导致错误
SELECT DATETIMEFROMPARTS(DATEPART(YEAR, GETDATE()), DATEPART(MONTH, GETDATE()), DATEPART(DAY, GETDATE()), DATEPART(HOUR, GETDATE()) + 2, 0, 0, 0)