从选择查询的结果中将1行或多行插入表中

时间:2015-11-05 12:15:02

标签: sql-server sql-server-2008-r2

我正在编写一个存储过程,可以通过一些修改再次将表中的单行或多行插入到同一个表中。

目前尚不清楚将插入多少行,它只能是一行或10.我需要将所有行都插入并更改一些字段。

我查看了其他问题,但找不到有关行数不明确问题的任何帮助。

我可以将结果放入临时表并进行修改,然后再将它们插入表中吗?它可以在这1行或1行上工作吗?

编辑: 例 有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为264,267和268的那些。 这些Id是选择的结果,它们基于某些标准。

然后我需要将它们再次插入到同一个表中,对ID为267和268的那些进行一些修改。

到目前为止,只有一个临时表和一个@@ rowcount对我来说是正确的。

1 个答案:

答案 0 :(得分: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)

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