You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

合并数据库时如何用SQL脚本向多对多关联表Bind插入已有连接?

解决多对多关联表Bind的数据插入问题

嘿,针对你现在要往Bind表插入多对多关联的需求,我给你几种实用的解决方案:

1. 直接批量插入单个模块的关联数据

如果只是像你说的,给ModuleID=1绑定多个MessageID,用INSERT INTO ... VALUES批量插入就可以了,写法很直观:

INSERT INTO [dbo].[Bind] (ModuleID, MessageID)
VALUES 
    (1, 5),
    (1, 1),
    (1, 7),
    (1, 9),
    (1, 6);

2. 一次性插入多个模块的关联关系

如果还有其他模块的关联需要插入,直接在VALUES列表里追加就行,不用分开执行多次插入:

INSERT INTO [dbo].[Bind] (ModuleID, MessageID)
VALUES 
    (1, 5),
    (1, 1),
    (1, 7),
    (1, 9),
    (1, 6),
    (2, 3), -- 比如ModuleID=2绑定MessageID=3
    (2, 4); -- ModuleID=2绑定MessageID=4

3. 从旧数据库迁移关联数据(如果关联关系来自原库)

如果这些关联关系本来就在另一个要合并的数据库里,直接用SELECT语句迁移更高效,不用手动写VALUES:

-- 假设旧数据库名为OldDatabase,表结构和新库一致
INSERT INTO [dbo].[Bind] (ModuleID, MessageID)
SELECT ModuleID, MessageID FROM [OldDatabase].[dbo].[Bind];

注意:如果新旧库的自增ID不匹配

如果旧库的ModuleID/MessageID和新库的不一样(因为自增ID是重新生成的),但表中的Name字段是唯一且一致的,可以通过Name字段来映射关联关系:

INSERT INTO [dbo].[Bind] (ModuleID, MessageID)
SELECT 
    m_new.ModuleID,
    msg_new.MessageID
FROM [OldDatabase].[dbo].[Bind] b_old
-- 关联旧库和新库的Module表,通过Name匹配
JOIN [OldDatabase].[dbo].[Module] m_old ON b_old.ModuleID = m_old.ModuleID
JOIN [dbo].[Module] m_new ON m_old.Name = m_new.Name
-- 关联旧库和新库的Message表,通过Name匹配
JOIN [OldDatabase].[dbo].[Message] msg_old ON b_old.MessageID = msg_old.MessageID
JOIN [dbo].[Message] msg_new ON msg_old.Name = msg_new.Name;

关键提醒

执行插入前一定要确认:

  • 所有要插入的ModuleID在新库的Module表中已经存在
  • 所有要插入的MessageID在新库的Message表中已经存在
    不然会触发外键约束报错哦!

内容的提问来源于stack exchange,提问作者Mady

火山引擎 最新活动