我尝试使用SSIS将一些数据从一个SQL服务器移动到我的Destimation SQL服务器,源代码有一个表" Parent"使用标识字段ID,它是" Child"的外键。表。
1 - N关系
问题很简单,将数据传输到具有父子关系的不同SQL Server的最佳方法是什么。
注意:ID(父和子)都是我们不想迁移的身份字段,因为目标来源不需要拥有它们。
请分享您的意见和想法。
FYI :我们创建了一个.Net代码(C#)来实现这一点,我们有一个获取父数据的查询,一个获取子数据的查询和使用linq我们加入数据并且我们循环父获取新ID并插入第二个表的引用。这是有效的,但我们希望在SSIS上创建相同的内容,以便稍后进行扩展。
答案 0 :(得分:1)
您必须导入子表之前的父表:
首先,您必须在目标服务器上创建表,您可以使用如下查询来实现此目的:
CREATE TABLE [dbo].[Tbl_Child](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Parent_ID] [int] NULL,
[Name] [varchar](50) NULL,
CONSTRAINT [PK_Tbl_Child] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Tbl_Parent](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
CONSTRAINT [PK_Tbl_Parent] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Tbl_Child] WITH CHECK ADD CONSTRAINT [FK_Tbl_Child_Tbl_Parent] FOREIGN KEY([Parent_ID])
REFERENCES [dbo].[Tbl_Parent] ([ID])
GO
ALTER TABLE [dbo].[Tbl_Child] CHECK CONSTRAINT [FK_Tbl_Child_Tbl_Parent]
GO
添加两个OLEDB连接管理器(来源和目的地)
Keep Identity
选项Keep Identity
选项WorkAround: 您可以禁用约束并导入数据,然后通过在导入前后添加SQL任务来启用它
禁用约束:
ALTER TABLE Tbl_Child NOCHECK CONSTRAINT FK_Tbl_Child_Tbl_Parent
启用约束:
ALTER TABLE Tbl_Child CHECK CONSTRAINT FK_Tbl_Child_Tbl_Parent
如果使用此解决方法,则无需在导入
时按顺序执行操作