SQL Server 2008使用循环插入表

时间:2012-11-19 11:01:00

标签: sql sql-server insert

我想在表格中插入记录,其中包含我从SELECT查询到其他其他表格的某些值。

SELECT TOP 1000 c.ContaId
FROM FastGroupe fg
INNER JOIN FastParticipant fp 
    ON fg.FastGroupeId = fp.FastGroupeId
INNER JOIN Participant p
    ON fp.ParticipantId = p.ParticipantId
INNER JOIN Contact c
    ON p.ContaId = c.ContaId
WHERE FastGroupeName like '%Group%'

我想使用从此查询中获取的ID插入另一个使用Member作为外键的表ContaId

我想使用WHILE循环,但我不知道我将从SELECT查询获得的记录数。

那么,是否有解决此问题的方法。

修改

这是表格Member

CREATE TABLE [dbo].[Request](
[MemberId] int IDENTITY(1,1) NOT NULL,
    [ContaId] int NOT NULL,
[PromoId] int NOT NULL
);

PromoId是一个非空列,但我想为我即将创建的所有记录添加相同的值。

Member记录必须像这样

 MemberId = Automatic,
 ContaId = // one of the query results,
 PromoId = 91

2 个答案:

答案 0 :(得分:1)

  

我想使用从此查询中获取的ID插入另一个表中   使用ContaId作为外键的成员。

你可以使用INSERT INTO .. SELECT而不是游标和while循环:

INSERT INTO Member(ContaId)
SELECT TOP 1000 c.ContaId
FROM FastGroupe fg
INNER JOIN FastParticipant fp 
    ON fg.FastGroupeId = fp.FastGroupeId
INNER JOIN Participant p
    ON fp.ParticipantId = p.ParticipantId
INNER JOIN Contact c
    ON p.ContaId = c.ContaId
WHERE FastGroupeName like '%Group%'

更新:试试这个:

INSERT INTO Member(ContaId, PromoId)
SELECT TOP 1000 c.ContaId, 91 AS PromoId
FROM FastGroupe fg
...

这将为所有1000条记录的91插入相同的值PromoId。由于MemberId设置为自动,只需在列列表中忽略它,它将获得自动值。

答案 1 :(得分:0)

您只需要确保列数与子查询中的选定数据匹配

语法是这样的:

Insert into YourTable(calumn1, column2, ..., columnN) 
values (Select (calumn1, column2, ..., columnN) from ... ) // The Subquery