使用“选择最大值”列更新带有临时表的最终SQL表

时间:2015-12-09 05:12:20

标签: sql-server ssms

美好的一天!我想要做的是使用临时表更新FinalTable,其中临时表的DateStamp列大于DateStamp

中的FinalTable

到目前为止,我已经想到了这样的事情:

INSERT INTO [dbo].[FinalTable]([DateStamp], [TIME], [DATE], [USER_LOGIN],[USER_NAME], [MODEL_NAME], [SCORECARD_IDENTIFIER], [SCORECARD_NAME],[ELEMENT_IDENTIFIER], [ELEMENT_NAME], [SERIES_IDENTIFIER], [SERIES_NAME],[PERIOD_NAME], [ACTION_TYPE], [ACTION], [PREVIOUS_VALUE], [VALUE], [UNIT])
   SELECT 
       CONVERT(VARCHAR, CONCAT([DATE], ' ' ,[TIME]), 121) AS [DateStamp],
       [TIME], [DATE], [USER_LOGIN], [USER_NAME],
       [MODEL_NAME], [SCORECARD_IDENTIFIER], [SCORECARD_NAME],
       [ELEMENT_IDENTIFIER], [ELEMENT_NAME],
       [SERIES_IDENTIFIER], [SERIES_NAME],
       [PERIOD_NAME], [ACTION_TYPE], [ACTION], 
       [PREVIOUS_VALUE], [VALUE], [UNIT]
   FROM 
       #TEMP 
   WHERE
       (SELECT CONVERT(VARCHAR, CONCAT([DATE], ' ' ,[TIME]), 121) AS [DateStamp] FROM #TEMP) > (SELECT MAX([DateStamp]) FROM [Test].[dbo].[FinalTable])

   DROP TABLE #TEMP

不幸的是它给我一个这样的错误:

  

Msg 512,Level 16,State 1,Line 17
  子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

我正在select中创建temp中的[DateStamp]列,因为我正在读取文本文件。所以最初我想查看两个表以及[DateStamp]#Temp列值更高的位置,然后[FinalTable]中的那个只是将新行添加/插入[FinalTable]

如果有人提出别的建议请告诉我。我仍然是SQL的新手,但我正在尽我所能。

2 个答案:

答案 0 :(得分:1)

试试这个

NewtonSoft.JsonConvert.DeserializeObject()

此外,我不建议在比较日期时使用varchar

答案 1 :(得分:0)

问题在这里:

where (SELECT convert(varchar,CONCAT([DATE], ' ' ,[TIME]), 121) AS [DateStamp] FROM #TEMP)

#TEMP

没有条件