插入父表和子表

时间:2013-12-09 23:25:45

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

我的问题在于@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]

1 个答案:

答案 0 :(得分:0)

尝试这样的事情。我把它写在了我的头顶,所以你可能需要调试:

基本上,我在这里写了一个游标,它循环遍历你想要用来插入新表的表的结果。然后一次创建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