2012-03-08 117 views
2

我在寫一個存儲過程,它將從一個表中獲取結果,然後將它們複製到另一個表中。這不完全匹配,我正在改變1列而忽略另一列。有5列,平均3-5個結果,如果這是相關的。SQL Server存儲過程 - SELECT語句然後在INSERT語句中使用結果

我基本上需要:

SELECT * FROM sometable WHERE somecolumn = 1 

然後在每一個結果

INSERT INTO anothertable (a,b,c) VALUES (@a, @b, @c) 

什麼是存儲過程中做到這一點的最好方法是什麼?

回答

6

您可以在一個聲明中做到這一點:

INSERT AnotherTable (a, b, c) 
SELECT a, b, c 
FROM SomeTable 
WHERE SomeColumn = 1 

儘可能避免在循環/光標/ RBAR做的事情(行通過痛苦行),而是儘量想在像上述基於SET的方法。

+0

可以「一」與@z取代,一個預定義變量表外的? – MattP 2012-03-08 11:50:23

+0

@MattP - 是的,這將導致插入的每一行具有相同的值 – AdaTheDev 2012-03-08 11:51:43

3

我會嘗試像

insert into anothertable (a,b,c) 
select a, b, c from sometable where somecolumn = 1 
2

您可以直接從一個SELECT查詢插入:

INSERT INTO anothertable (a,b,c) 
SELECT @a, @b, @c FROM sometable WHERE somecolumn = 1 
+0

當@a是在語句之​​前定義的單獨變量並且只有b和c在表中時,此工作是否會進行? – MattP 2012-03-08 11:49:08

+0

是的 - 你可以根據需要混合和匹配 - 你可以聲明@a作爲變量,然後用sometable中的列名替換@b和@c,然後插入列的所有值,使用相同的值@每個。 – Bridge 2012-03-08 11:57:31

相關問題