2014-03-19 79 views
-2

我有一個名爲#CSVTest_Data的表。 我不妨跟以下查詢的結果來替換表的內容:用SQL Server中的查詢結果替換表的內容

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 

我想我會嘗試達明的想法雖然是看起來不錯,避免了額外的臨時表。爲什麼在我的問題上反對票?我知道我是一個noob在這,但這就是爲什麼我需要有用的建議...

+2

退房'SELECT INTO '。 –

+2

替換是什麼意思?爲什麼不只是刪除'except'過濾掉的東西呢? – Jakub

+0

查詢標識數據庫中不存在的數據全部準備好,因此我的想法是確保在#CSVTest_Data中不存在重複的數據,然後將該表的內容添加到名爲Data的主數據庫表中。這是爲了避免添加重複的條目。 –

回答

3

而是尋求替換一張表,使用基於同一個表的查詢,只是做一個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) 
+0

哈哈錯過了那麼多!你的答案更具可讀性:) – user1261104

+0

謝謝達米安。我必須編輯最上面的一行才能在DELETE之後添加表名以完成此工作。編輯通過後,我會將其標記爲正確答案。我的代表對這個問題進行了抨擊。達到了7,但現在下降到3.不知道爲什麼-2讓我-4? –

+0

@SteveW - 我不確定,恐怕。你對所需的編輯是正確的,所以不知道爲什麼被拒絕。我現在自己做了。 –

0

首先,表#CSVTest_Data必須具有相同數量的列作爲您的SELECT查詢... 然後,您添加您查詢的頂部這樣的:

INSERT INTO #CSVTest_Data 
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