我正在编写一个存储过程,它将从一个表中获取结果,然后将它们复制到另一个表中。它不完全匹配,我正在改变1列并忽略另一列。如果相关,则有5列,平均3-5个结果。
我基本上需要:
SELECT * FROM sometable WHERE somecolumn = 1
然后是每个结果
INSERT INTO anothertable (a,b,c) VALUES (@a, @b, @c)
在存储过程中执行此操作的最佳方法是什么?
答案 0 :(得分:6)
您可以在一个声明中执行此操作:
INSERT AnotherTable (a, b, c)
SELECT a, b, c
FROM SomeTable
WHERE SomeColumn = 1
尽可能避免在循环/游标/ RBAR(按行Agonizing Row行)中进行操作,而是尝试使用上述基于SET的方法进行思考。
答案 1 :(得分:3)
我会尝试像
这样的东西insert into anothertable (a,b,c)
select a, b, c from sometable where somecolumn = 1
答案 2 :(得分:2)
您可以直接从选择查询中插入:
INSERT INTO anothertable (a,b,c)
SELECT @a, @b, @c FROM sometable WHERE somecolumn = 1