使用循环将SQL Server 2008插入到表中
我想在一个表中插入具有某些值的记录,这些值是我从其他表的使用循环将SQL Server 2008插入到表中,sql,sql-server,insert,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
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
查询中获得的记录数
那么,有没有解决这个问题的方法呢
编辑
这是表成员
CREATE TABLE [dbo].[Request](
[MemberId] int IDENTITY(1,1) NOT NULL,
[ContaId] int NOT NULL,
[PromoId] int NOT NULL
);
PromoId
是一个非空列,但我想为我要创建的所有记录输入相同的值
成员
记录必须如下所示
MemberId = Automatic,
ContaId = // one of the query results,
PromoId = 91
我想使用从这个查询中获得的ID插入到另一个表中
将ContaId用作外键的成员
您可以使用替代游标和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条记录的
promid
插入相同的值91
。由于MemberId
设置为自动,只需在列列表中忽略它,它就会得到一个自动值。您只需确保列数与子查询中选定的数据匹配即可
语法如下所示:
Insert into YourTable(calumn1, column2, ..., columnN)
values (Select (calumn1, column2, ..., columnN) from ... ) // The Subquery
哇,这么简单,但是在表
Member
中,我有其他列,它们不是来自SELECT
查询。这会是一个问题吗?@the_ruby_racer,这会是一个问题,因为select语句将为其他非select查询的列提供1000个ID。你将如何得到它们?你必须把它们放在这个选择的位置。通过加入
或联合
。您能解释一下吗?在表成员中,我有其他不是来自SELECT查询的列。这会是一个问题吗?这取决于这些列是否为Nullabel或Constraint列,您必须确定它们的值。否则这将不会有问题,您只需在插入后写入与您在子查询中选择的相同数量的列