2012-11-19 4 views
2

다른 테이블의 SELECT 쿼리에서 얻은 특정 값을 사용하여 테이블에 레코드를 삽입하려고합니다.루프를 사용하여 테이블에 SQL Server 2008 삽입

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%' 

나는 외래 키로 ContaId을 사용하여 다른 테이블 Member에 삽입 나는이 쿼리에서 얻을 ID를 사용하고 싶습니다.

WHILE 루프를 사용하고 싶지만 SELECT 쿼리에서 얻을 레코드 수를 알지 못합니다.

따라서이 문제의 해결 방법이 있습니까?

편집

Member

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

PromoId가 아닌 널 (null) 열 수있는 테이블을하지만, 내가 만들려고 해요 모든 레코드에 대해 동일한 값을 넣고 싶습니다.

Member 기록은 내가 외래 키로 ContaId를 사용하는 다른 테이블 회원에 삽입 나는이 쿼리에서 얻을 ID를 사용하려면이

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

답변

1

처럼해야합니다.

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

이것은 PromoId에 대해 같은 값 91을 삽입합니다 :이 시도 루프과 같이하면서

당신은 커서 대신 INSERT INTO .. SELECT을 사용할 수 있습니다 모든 1000 기록. 그리고 MemberId이 자동으로 설정 되었기 때문에 열 목록에서이를 무시하면 자동 값이됩니다.

+0

와우 너무 간단하지만 테이블의'Member', I 'SELECT' 쿼리에서 오지 않는 다른 컬럼을 가지고 있습니다. 그게 문제가 될까요? – kbaccouche

+0

@ the_ruby_racer select 문은 select 쿼리에서 오지 않은 다른 열에 대해 1000 개의 ID를 제공하므로 문제가 될 수 있습니다. 어떻게 그들을 얻을 것입니까? 당신은 어떻게 든이 선택된 문장 안에 그들을 넣어야 만합니다. 'JOIN'또는 'UNION'. 좀 더 설명해 주시겠습니까? –

+0

나는 나의 질문을 편집했다, 당신은 내가 의미 한 것을 보았습니다. – kbaccouche

0

당신은

구문이 같다 컬럼의 수는 하위 쿼리에서 선택한 데이터와 일치 있는지 확인하기 만하면됩니다 :

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

테이블 멤버에 SELECT 쿼리에서 오지 않은 다른 열이 있습니다. 그게 문제가 될까요? – kbaccouche

+0

IT가 Nullabel이 아니거나 Constraint Columns인지 여부에 따라 다릅니다. 어떤 값을 가져야할지 결정해야합니다. 그렇지 않으면 이것은 아무런 문제가되지 않을 것입니다. Insert를 누른 후 하위 쿼리에서 선택하는만큼 많은 열을 써야합니다. – CloudyMarble

관련 문제