Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用循环将SQL Server 2008插入到表中_Sql_Sql Server_Insert - Fatal编程技术网

使用循环将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列,您必须确定它们的值。否则这将不会有问题,您只需在插入后写入与您在子查询中选择的相同数量的列