我正在编写一个存储过程,可以通过一些修改再次将表中的单行或多行插入到同一个表中。
目前尚不清楚将插入多少行,它只能是一行或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对我来说是正确的。
答案 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)
这似乎是你所需要的,但你建议不要......我错过了什么?