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はnull以外の列ですが、作成しようとしているすべてのレコードに同じ値を設定したいと思います。

レコードはこのMemberようにする必要があります

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

2 に答える 2

1

このクエリから取得したIDを使用して、ContaIdを外部キーとして使用する別のテーブルMemberに挿入したいと思います。

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は自動に設定されているため、列のリストで無視すると、自動値が取得されます。

于 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 に答える