2012-08-28 47 views
-4

我想插入幾百行成指向其他表進行PK的表。我一直試圖使用while循環在表中插入多個記錄。我實際上正在設置我的測試數據。插入表格中的多條記錄與while循環

這是我在做什麼:

declare @count int; 
set @count = 4018; 

while @count <= 5040 
begin 
    INSERT INTO [MY_TABLE] 
       ([pk_from_other_table] 
       ,[..] 
       ,[...] 
       ,[..] 
       ,[..] 
       ,[...] 
       ,[...] 
       ,[..]) 
     select 
       (pk_from_other_table, 
       ,[..] 
       ,[...] 
       ,[..] 
       ,[..] 
       ,[...] 
       ,[...] 
       ,[..]) 
    @count = @count + 1; 
end 

但這並不似乎工作!任何人都可以幫助請...我想要做的就是插入記錄數=在主表中存在的記錄數。

?關於如何實現這一點的任何想法?

我要麼得到近數不正確的語法時才

消息102,級別15,狀態1,行17 附近有語法錯誤 ''。

+3

請更新您的問題,我們不能看到你已經嘗試了什麼。 – Kermit

+0

現在添加...添加了一些不正確的內容..糾正它 – simranNarula

+0

什麼是錯誤信息? – JonH

回答

13

您當前的語法問題是這需要有set @count = @count + 1@count = @count + 1;

但是......

沒有必要爲一個循環。你可以簡單地做一個大的直接插入,如:

insert into your_table (fk_col, other_col1, other_col2) 
select pk_col, 'something', 'something else' 
from your_other_table 

如果需要,您可以在where條款添加到上面。

+0

是的,但我想遍歷..有很多的這些記錄 – simranNarula

+8

你在基於集合的環境中工作 - 如果可能的話會導致環路。 –

+3

@ user1630846 - 幾百行,到目前爲止它不是很多記錄。 – Lamak

7

關於消息102,級別15,狀態1,第17行附近有語法錯誤 ''。

你得在第二選擇列表雙逗號:

select 
(pk_from_other_table, 
,[..] 

刪除一個。

關於插入: 如果你想插入從源表中的所有記錄到目的地多次,你能做到這一點的循環:

declare @count int; 
set @count = 4018; 

while @count <= 5040 
begin 
    INSERT INTO DestinationTableName 
       (DestinationTableColumn1Name 
       ,DestinationTableColumn2Name --ect 
     ) 
     select 
       SourceTableColumn1Name 
       ,SourceTableColumn2Name --ect 
       from SourceTableName 
    set @count = @count + 1; 
end 

但當你想插入從源表中的許多行至目的地一次,where就足夠了:

INSERT INTO DestinationTableName 
      (DestinationTableColumn1Name 
      ,DestinationTableColumn2Name --ect 
      ) 
      select 
      SourceTableColumn1Name 
      ,SourceTableColumn2Name --ect 
      from SourceTableName 
      where SourceTablePK between 4018 and 5040 --LowerBound and UpperBound 
      --or SourceTablePK in (1, 2, 3) etc 

你不必一個接一個地去做。