将用户友好的 Excel sheet 导入具有许多外键的 SQL 服务器 table

Importing user-friendly Excel sheet into a SQL Server table that has many foreign keys

我有一个 Excel sheet 由 HR 员工填充,其中包含数千条客户记录,看起来像这样:

User Friendly Excel Sheet Example Screenshot

我的客户 SQL 服务器 table 架构如下所示

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 sheet 然后尝试添加一些列,例如 CreatorAdding Date 在 运行 时间,当我尝试 运行 Adapter.Update(ModifiedDatatable) 它抛出异常

Update requires a valid UpdateCommand when passed DataRow collection with modified rows

当我尝试使用 SqlBulkCopy 插入这个 Excel sheet 它按预期工作

Excel Sheet with Foreign Keys Screenshot

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

通知:

很抱歉将屏幕截图上传到 Tinypic,但由于我的声望点,我无法将它们上传到这里。

提前致谢

在这种情况下,我会创建一个 SSIS 包。 SSIS 可以从 Excel 中读取,您可以获取它来查询数据库以获取额外信息,以构建不会违反 FK 约束的有效数据集。