2016-05-16 60 views
2

如果可能,我想將一些分段數據移動到生產表並刪除分段數據並同時插入生產錶的歷史數據。我想要做類似如下:使用output&into子句將數據插入到兩個表中

DELETE FROM _stagingTable 
OUTPUT deleted.idTest, deleted.textTest 
INTO _productionTable(idTest,textTest) 
--Below is what im not sure 
OUTPUT 'Add',deleted.idTest, deleted.textTest 
INTO _productionTableHistory(typeTest, idTest, textTest) 

是否有可能多次使用輸出子句?或者你建議我做什麼?

在此先感謝

+1

你試過了嗎? –

+0

是的,它沒有工作 –

+0

聲明的重複(http://stackoverflow.com/questions/17165870/multiple-output-clauses-in-merge-insert-delete-sql-commands)可能是內容豐富的,但我看不見它如何解決將暫存表中的已刪除記錄移動到另一個表中的問題。 –

回答

0

答案是否定的,你不能直接做你想要的。

如果您不想使用觸發器解決方案,並且不想使用基於主鍵的查詢,那麼我認爲您需要臨時表。

輸出到#TempHoldTable中,然後從#TempHoldTable插入到table1中並從#TempHoldTable插入到table2中。

+0

非常感謝。這似乎是對我來說最合乎邏輯的方式 –

-1

我覺得這是這個想法:

DELETE FROM _stagingTable 
    OUTPUT deleted.idTest, deleted.textTest 
    INTO _productionTable(idTest, textTest); 

INSERT INTO _productionTableHistory(typeTest, idTest, textTest) 
    SELECT 'Add', idTest, textTest 
    FROM _productionTable pt; 

這是兩個單獨的語句。如果需要,可以將它們包裝到單個事務中。

如果您擔心_productionTable中的數據,請在output子句中使用它之前將其截斷。考慮到它以一個下劃線開頭,我很難相信它的意圖是而不是只是一個臨時的地方,但我不知道正在使用的命名約定。

+2

這會產生一個從_productionTable中抓取記錄的問題,這些記錄是在此'事務'之前加載的。 –

+0

@JoeC。 。 。所以在插入之前清空表格。 '_'暗示它無論如何都是臨時表。 –

+1

_對我來說不是那個意思。如果沒有在問題中指定,生產表就意味着它將具有多次運行的記錄。 –

相關問題