我想在表格中插入记录,其中包含我从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
答案 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