【问题标题】:Insert into parent table and child tables插入父表和子表
【发布时间】:2013-12-09 23:25:45
【问题描述】:

我的问题是@officeident。对于插入LicenseHolder 的每条新记录,它具有相同的officeident.. 此SQL 将每行的值1495 插入OfficeID。这是最后插入的身份。这不会创建父子关系。

我想我应该研究下一个光标。对于Office 中的每个插入,然后将新行添加到LicenseHolder 以便我可以建立关系。或者,如果有更简单的方法或任何帮助将不胜感激。

DECLARE @officeident INT

insert into [MembersDB].[dbo].[Office] 
([AddressLine1]
,[AddressLine2]
,[State]
,[PostCode])
select [OfficeMailingAddr],[OfficeMailingAddr],[state],'1' FROM [Members].[dbo].[Main]
SET @officeident = SCOPE_IDENTITY()

INSERT INTO [MembersDB].[dbo].[LicenseHolder] ([Name]
  ,[Email]
  ,[Mobile]
  ,[OfficeNumber]
  ,[LicenseHolderTypeID]
  ,[PartyTypeID]
  ,[OfficeID])

SELECT  
   [OfficeOf]
  ,[OfficeEmail]
  ,[Phone]
  ,'1234'
  ,'1'
  ,'1'
  ,@officeident     --I want like this to be different for each row. 
FROM [Members].[dbo].[Main]

【问题讨论】:

    标签: sql sql-server sql-server-2008 tsql


    【解决方案1】:

    试试这样的。我把它写在我的脑海里,所以你可能还需要调试:

    基本上,我在这里写了一个游标,它循环遍历要用于插入新表的表的结果。然后一次创建 2 个新的插入记录...(然后对 MAIN 表中的下一个结果行执行相同的操作)。

    DECLARE @OfficeMailingAddr as varchar(254), @OfficeMailingAddr as varchar(254), @state as varchar(254), @Name as varchar(254), @Email as varchar(254), @Mobile as varchar(254), @Phone as varchar(254)
    
    declare NewCursor Cursor for
    SELECT [OfficeMailingAddr],[OfficeMailingAddr],[state], [Name]
      ,[Email]
      ,[Mobile]
      ,[OfficeNumber] FROM [Members].[dbo].[Main]
    
    open NewCursor
    fetch next from NewCursor into @OfficeMailingAddr, @OfficeMailingAddr, @state, @Name, @Email, @Mobile, @Phone
    WHILE @@FETCH_STATUS = 0
    begin
    
        insert into [MembersDB].[dbo].[Office] 
    ([AddressLine1]
    ,[AddressLine2]
    ,[State]
    ,[PostCode]) VALUES (@OfficeMailingAddr, @OfficeMailingAddr, @state,'1')
    SET @officeident = SCOPE_IDENTITY()
    
    INSERT INTO [MembersDB].[dbo].[LicenseHolder] ([Name]
      ,[Email]
      ,[Mobile]
      ,[OfficeNumber]
      ,[LicenseHolderTypeID]
      ,[PartyTypeID]
      ,[OfficeID]) VALUES (@Name, @Email, @Mobile, @Phone,'1234'
      ,'1'
      ,'1'
      ,@officeident)
    
    FETCH NEXT FROM NewCursor INTO @OfficeMailingAddr, @OfficeMailingAddr, @state, @Name, @Email, @Mobile, @Phone
    END
    
    Close NewCursor
    deallocate NewCursor
    

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2018-05-07
      • 2017-06-16
      相关资源
      最近更新 更多