2015-11-05 80 views
0

我正在編寫一個存儲過程,以將表中的單行或多行插入同一個表中,並進行一些修改。從選擇查詢的結果中將一行或多行插入表中

目前還不清楚將插入多少行,它可能只有一個或10個。我需要將它們全部插入並更改一些字段。

我看了其他問題,但找不到任何有助於我行數不清的問題。

我可以把結果放到一個臨時表中並進行修改,然後再將它們插入到表中嗎?它會在這個1或n個行上工作嗎?

編輯: 示例 有6行具有相同的idenfitifier。 (實際表包含36列,我用這5爲例)

+-----+--------+------------+-------------------------+----------+ 
| Id | NctsId | BeyanIndex |  CancelDate  | LRN | 
+-----+--------+------------+-------------------------+----------+ 
| 263 |  97 | NULL  | NULL     | NULL  | 
| 264 |  97 | NULL  | 2015-11-02 12:38:15.953 | MULTI | 
| 265 |  97 | 0   | NULL     | NULL  | 
| 266 |  97 | 1   | NULL     | NULL  | 
| 267 |  97 | 0   | 2015-11-02 12:38:15.953 | test1313 | 
| 268 |  97 | 1   | 2015-11-02 12:34:32.060 | test1414 | 
+-----+--------+------------+-------------------------+----------+ 

我需要的那些與ID的264267個268 這些ID是一個選擇過程的結果,他們基於一些標準。

然後,我需要再次將它們插入到同一表上的那些部分修改ID的267和268

到目前爲止,只有一個臨時表和@@ ROWCOUNT感覺就在處理這個對我。

回答

0

如果您可以確定要使用WHERE子句處理的行並在SELECT查詢中創建修改後的版本,那麼您可以使用INSERT ... SELECT,該行將執行0行或更多行,具體取決於滿足WHERE規範。

INSERT tbl (col1, ...) 
    SELECT 
    CASE 
     WHEN something THEN modified-column-expression 
     WHEN something-else ... 
    END col1 
    , ... 
    FROM tbl 
    WHERE id in (list-of-affected-ids) 

這似乎是你需要的,但你建議不是......我錯過了什麼?

相關問題