2016-03-23 19 views
0

テーブルとテーブルBがあります。それらの間の関係は中間テーブルABを使用して行われ、両方のIDを格納します。SQL:UPDATE多対多中間テーブル

Table A 

ID integer 
Value varchar(MAX) 

Table B 

ID integer 
Value varchar(MAX) 

Table AB 

AID integer 
BID integer 

私はJOIN年代で必要なデータを選択することができますが、どのようABにデータを書き込むには? 私はAIDとS integer「はBIDの受信リストにABで関係を更新する方法、BIDです(カスタムタイプArray_Integertable(ID integer)として行われる)S」のリストを取得します場合、私は意味ですか? 私は汚れていて手動で作業することができますが、私はより真の方法を探しています。

UPD:ペーストビン上のスキーマをチェック - http://pastebin.com/BeKm2h3F

+0

MERGEステートメントを使用して、子テーブルまたはマッピングテーブル –

+0

を管理(リストに基づいて挿入/更新/削除)することができます。 –

+0

このリストはどのような形式で入手できますか? – sagi

答えて

0

私はあなたが修正理解していれば、このクエリはあなたが必要なものでなければなりません。

INSERT INTO AB 
SELECT * FROM 
(
    -- Here you write your AID value instead of 1 
    SELECT 1 AS AID 
) AS a1 
CROSS JOIN 
(
    -- Query that returns list if id's from table B 
    SELECT ID AS BID FROM B WHERE ID < 5 
) 
0

次のようにTableABを更新することができます。

declare @Aid int 
declare @Bid int 

insert into TableA(value) 
select 'abcd' 
set @Aid = ident_currect('TableA') 

insert into TableB(value) 
select 'xyz' 
set @Bid = ident_currect('TableB') 

insert into TableAB -- This will update your junction table 
select @Aid,@Bid 

私はあなたにtableAとテーブルBは、ID列を持っていると仮定しています。また、ident_currect()の代わりにscope_identity()を使用することもできます

関連する問題