Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法构造数据类型datetime,某些参数的值无效_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 无法构造数据类型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,

我在下面的代码中得到这个错误; 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, 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)