【问题标题】:How to use nested Insert based on select statement using ms sql server如何使用 ms sql server 基于 select 语句使用嵌套插入
【发布时间】:2019-09-05 00:36:01
【问题描述】:

我在 Select 语句中有多个记录,我想根据主键将这些记录插入两个不同的表中。

我有三个表 Roles,MenuMaster 和 MenuChild,如下所示

角色: - RoleID(PK) RoleName - 1 销售 - 2 营销 - 3 IT

菜单大师: - MID(PK) MFormName RoleID(FK) - 1 订单 1 - 2 SMM 2 - 3 帮助 1

MenuChild: - CID(PK) FormName, MID(FK) - 1个新订单.aspx 1 - 2 重复订单.aspx 1 - 3 Advertise.aspx 2

我想创建一个新的合并角色,例如“4,销售和营销”,并将 RoleID=1 和 RoleID=2 的所有记录从 MenuMaster 复制到“销售和营销”RoleID,并根据新插入的记录 MenuID 复制 MenuChild 记录

【问题讨论】:

    标签: sql-server-2012


    【解决方案1】:

    创建角色并使用临时表填充其他表:

    INSERT INTO dbo.Roles (RoleName)
    VALUES ('Sales & Marketing')
    
    SELECT 
        'Sales & Marketing' as RoleName,
        mm.MenuId,
        mm.MFormName,
        SCOPE_IDENTITY() AS PK
    INTO #tmp
    FROM dbo.MenuMaster mm
    WHERE mm.RoleId in (1,2)
    
    INSERT INTO dbo.MenuMaster (MFormName, RoleId)
    SELECT t.MFormName, t.PK from #tmp t
    
    UPDATE #tmp SET PK = SCOPE_IDENTITY()
    
    INSERT INTO dbo.MenuChild(FormName, MenuId)
    SELECT t.MFormName, t.PK from #tmp t
    

    这有点难看,因为我不确定我是否完全理解您的要求。您也可以使用 CTE,但在第一个 INSERTMenuMaster 之后,您将需要创建另一个 CTE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      相关资源
      最近更新 更多