DB数据迁移到新结构

时间:2017-06-23 09:03:47

标签: sql sql-server data-migration

我需要将数据从SQL Server 2008数据库迁移到新的表结构。我目前正在使用SQL脚本。 表结构如下所示: table structure 我尝试使用此脚本迁移数据:

INSERT INTO [NewCompanies]
       ([ID]
       ,[ApplicationID]
       ,[Name])          
 SELECT c.Id
        ,(SELECT ApplicationId 
            FROM [Files] f 
            WHERE f.CompanyId = c.Id 
            GROUP BY ApplicationId, CompanyId)
        ,c.Name      
 FROM [Companies] c
GO

但它没有用,因为有些公司属于旧数据库结构中的1个以上的应用程序。 作为解决方案,我需要在公司表中再插入一个具有相同名称的记录,并使用该CompanyId。

我如何使用SQL脚本加入此内容? 以下是SQLFIDDLE演示案例。

2 个答案:

答案 0 :(得分:0)

如果applicationID始终相同,您只需将“Top 1”添加到子查询中即可:

INSERT INTO [NewCompanies]
       ([ID]
       ,[ApplicationID]
       ,[Name])          
 SELECT c.Id
        ,(SELECT TOP 1 ApplicationId 
            FROM [Files] f 
            WHERE f.CompanyId = c.Id 
            GROUP BY ApplicationId, CompanyId)
        ,c.Name      
 FROM [Companies] c
GO

答案 1 :(得分:0)

我用这种方式解决了这个问题:

INSERT INTO [dbo].[NewCompanies]
([ID],
 [ApplicationID],
 [Name]
)
       SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS Row#,
              sq.ApplicationId,
              c.Name
       FROM
       (
           SELECT ApplicationId,
                  CompanyId
           FROM [Companies] c
                LEFT JOIN [Files] f ON c.Id = f.CompanyId
           GROUP BY ApplicationId,
                    CompanyId
       ) AS sq
       INNER JOIN Companies c ON sq.CompanyId = c.Id
       ORDER BY sq.CompanyId;
GO