将用户友好的Excel工作表导入到具有许多外键的SQL Server表中

我有一张由HR员工填写的Excel工作表,上面有成千上万的客户logging:

用户友好的Excel工作表示例截图

我的客户的SQL Server表模式看起来像这样

CREATE TABLE [dbo].[Clients] ( [ID] INT IDENTITY (1, 1) NOT NULL, [Name] NVARCHAR (100) NOT NULL, [Photo] VARCHAR (200) NOT NULL, [PolicyID] INT NOT NULL, [BirthDay] DATE NOT NULL, [Gender] BIT NOT NULL, [Title] NVARCHAR (100) NULL, [Nationality] NVARCHAR (100) NOT NULL, [Relationship] NVARCHAR (50) NOT NULL, [ClassID] INT NOT NULL, [SponsorID] INT NULL, [HRID] INT NOT NULL, [Active] BIT CONSTRAINT [DF_Clients_Active] DEFAULT ((1)) NOT NULL, [StartingDate] DATE NOT NULL, [EndingDate] DATE NOT NULL, [AddingDate] DATETIME NOT NULL, [Creator] INT NOT NULL, [UniqueID] NVARCHAR (50) NULL, [PassportNo] NVARCHAR (50) NULL, CONSTRAINT [PK_Clients] PRIMARY KEY CLUSTERED ([ID] ASC), CONSTRAINT [FK_Clients_Clients] FOREIGN KEY ([SponsorID]) REFERENCES [dbo].[Clients] ([ID]), CONSTRAINT [FK_Clients_Employees] FOREIGN KEY ([HRID]) REFERENCES [dbo].[Employees] ([ID]), CONSTRAINT [FK_Clients_Employees1] FOREIGN KEY ([Creator]) REFERENCES [dbo].[Employees] ([ID]), CONSTRAINT [FK_Clients_Policy] FOREIGN KEY ([PolicyID]) REFERENCES [dbo].[Policy] ([ID]), CONSTRAINT [FK_Clients_Classes] FOREIGN KEY ([ClassID]) REFERENCES [dbo].[Classes] ([ID]) ); 

什么是最好的方法来实现这样的插入?

我试过使用SqlBulkCopy但它不允许任何操作插入的行。

我也试过使用SqlAdapter.Update(Datatable)但是因为我已经使用ExcelDataReader读取Excel工作表,所以试图在运行时添加一些像CreatorAdding Date这样的列,当我尝试运行Adapter.Update(ModifiedDatatable)它会抛出一个exception

使用修改的行传递DataRow集合时,Update需要有效的UpdateCommand

当我试图使用SqlBulkCopy来插入这个Excel表,它按预期工作

Excel工作表与外键截图

但是强制最终用户在导入前在Excel工作表中放置一些外键是不对的。

注意:

对不起,上传到Tinypic截图,但我不能上传他们,因为我的代表点。

提前致谢

我将在这种情况下创build一个SSIS包。 SSIS可以从Excel中读取,并且可以通过查询数据库的额外信息来构build一个不会违反FK约束条件的有效数据集。