我需要将数据从SQL Server 2008数据库迁移到新的表结构。我目前正在使用SQL脚本。 表结构如下所示: 我尝试使用此脚本迁移数据:
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演示案例。
答案 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