使用SQL Server中的查询结果替换表的内容

时间:2014-03-19 14:02:05

标签: sql sql-server

我有一个名为#CSVTest_Data的表。 我希望用以下查询的结果替换该表的内容:

SELECT FirstTimeTaken, 
       LatestTimeTaken, 
       Market, 
       Outcome, 
       Odds, 
       NumberOfBets, 
       VolumeMatched, 
       InPlay
  FROM #CSVTest_Data
EXCEPT
SELECT OddsFirstTimeTaken, 
       OddsLastTimeTaken, 
       MarketName, 
       Outcome, 
       Odds, 
       NumberOfBets, 
       VolumeMatched, 
       InPlay
  FROM Data

如果有人能告诉我如何实现这一目标,我将不胜感激。感谢。

编辑:

我从另一个人给你的想法中找到了另一种方法。它需要创建一个新的临时表并在之后使用它,但它可以工作:

SELECT * INTO #CSVTest_Data_new FROM #CSVTest_Data WHERE 1 = 0;

INSERT INTO #CSVTest_Data_new
SELECT FirstTimeTaken, LatestTimeTaken, Market, Outcome, Odds, NumberOfBets, VolumeMatched, InPlay
FROM #CSVTest_Data  -- Coming data

EXCEPT --Minus

SELECT OddsFirstTimeTaken, OddsLastTimeTaken, MarketName, Outcome, Odds, NumberOfBets, VolumeMatched, InPlay
FROM Data --Existing Data

我想我会尝试Damien的想法,因为它看起来不错,并避免额外的临时表。为什么对我的问题投票?我知道我这是一个菜鸟,但这就是为什么我需要有用的建议......

3 个答案:

答案 0 :(得分:4)

使用基于同一个表的查询,而不是寻求替换表,只需执行DELETE

DELETE #CSVTest_Data
  FROM #CSVTest_Data d
WHERE EXISTS( SELECT * from Data d2 WHERE
    d.FirstTimeTaken = d2.OddsFirstTimeTaken AND
    d.LastTimeTaken = d2.OddsLastTimeTaken AND
    d.Market = d2.MarketName AND
    d.Outcome = d2.Outcome AND
    d.Odds = d2.Odds AND
    d.NumberOfBets = d2.NumberOfBets AND
    d.VolumeMatched = d2.VolumeMatched AND
    d.InPlay = d2.InPlay)

答案 1 :(得分:0)

首先,表#CSVTest_Data必须与SELECT查询具有相同的列数... 然后,在查询顶部添加:

INSERT INTO #CSVTest_Data

答案 2 :(得分:0)

delete #CSVTest_Data from #CSVTest_Data A
inner join Data B on
 A.FirstTimeTaken = B.OddsFirstTimeTaken and
 A.LatestTimeTaken = B.OddsFirstTimeTaken and
 A.Market = B.MarketName and
 A.Outcome = B.Outcome and
 A.Odds = B.Odds and
 A.NumberOfBets = B.NumberOfBets and
 A.VolumeMatched = B.VolumeMatched and
 A.InPlay = B.InPlay