2

我想在表中插入具有某些值的记录,这些值是从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
4

2 回答 2

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
...

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

于 2012-11-19T11:03:15.727 回答
0

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

语法是这样的:

Insert into YourTable(calumn1, column2, ..., columnN) 
values (Select (calumn1, column2, ..., columnN) from ... ) // The Subquery
于 2012-11-19T11:04:06.457 回答