2015-11-05 45 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) 

这似乎是你需要的,但你建议不是......我错过了什么?

相关问题