2011-11-17 109 views
4

基本上,我想從一個表中提取id並插入另一表id與其他一些數據。所以算法如下:循環在SQL查詢

foreach id in (select id from table) 
{ 
    insert into table2 values (id,etc,etc); 
} 

如何使用SQL查詢執行此功能?

+1

它始終是更好地使用非循環SQL。對於數據庫SQL循環來說,優化和分析SQL選擇,插入,更新,刪除語句要困難得多。性能差異非常顯着。 – Eugen

回答

6

使用

insert into table2 
select id, etc, etc from table 

而不是爲循環。

Here's一個有用的文章。

+0

不,我只是需要一個值從表中我不需要複製所有表中其他。我想要table1中的ID,並將其插入到table2中,併爲每個循環中的table2保留相同的其他值。所以每個循環後只有參數ID發生變化。 –

+0

@farazali您可以使用靜態/硬編碼值,其中soulcheck具有「等等,等等」。例如'插入到表2選擇ID,「我的字符串」,「2011-11-12」,5.0 4'等 – GregL

3
insert into table2 select id,etc,etc from table; 
+0

不,我只是需要一個值從表中我不需要複製所有表中其他。我想要table1中的ID,並將其插入到table2中,併爲每個循環中的table2保留相同的其他值。所以只有參數ID在每個循環後改變 –

+2

我不明白什麼是錯的。 「等等」部分可以是任何東西,並不一定來自桌子。例如,你可以這樣做:insert into table2 select id,1,2,3 from table –

0

在SQL查詢,如果你想使用循環再使用光標PLS。檢查以下樣品

--DECLARE CURSOR 
DECLARE @ID VARCHAR(MAX) 

    --READ DATA FROM TABLE TO CURSOR 

DECLARE IDCR CURSOR FOR SELECT id FROM table 

OPEN IDCR; 

FETCH NEXT FROM IDCR INTO @ID 

WHILE @@FETCH_STATUS = 0 
BEGIN 
INSERT INTO table2 VALUES (@ID,etc,etc) 

FETCH NEXT FROM IDCR INTO @ID 
END 
CLOSE IDCR; 

DEALLOCATE IDCR; 

請檢查以下參考。鏈接https://docs.microsoft.com/en-us/sql/t-sql/language-elements/declare-cursor-transact-sql