2016-03-23 39 views
0

我有表A和表B。它們之間的關係使用中間表AB完成,它存儲來自兩者的ID。SQL:更新多對多的中間表

Table A 

ID integer 
Value varchar(MAX) 

Table B 

ID integer 
Value varchar(MAX) 

Table AB 

AID integer 
BID integer 

我可以選擇與JOIN的所需要的數據,但如何將數據寫入AB? 我的意思是,如果我會得到AID和列表的integer的(做自定義類型Array_Integertable(ID integer)),這是BID,如何使用的BID接收清單更新關係在AB的? 我可以做很多骯髒和手動工作,但我正在尋找更真實的方式。

UPD:檢查引擎收錄模式 - http://pastebin.com/BeKm2h3F

+0

您可以使用MERGE語句來管理(基於列表的插入/更新/刪除)child或映射表 –

+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 

我假設你的表A和表B有標識列。您也可以使用scope_identity()而不是ident_currect()