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

本文关键字:许多外 Server SQL 表中 导入 用户 Excel 工作 | 更新日期: 2023-09-27 17:54:07

我有一个由人力资源员工填充的Excel表格,其中包含数千条客户记录,它看起来像这样:

用户友好的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)时,它抛出一个异常

当传递带有修改行的DataRow集合时,Update需要一个有效的UpdateCommand

当我尝试使用SqlBulkCopy插入此Excel工作表时,它按预期工作

Excel表外键截图

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

注意:

很抱歉上传截图到Tinypic,但我不能在这里上传,因为我的Rep点。

Thanks in advance

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

在这个场景中,我将创建一个SSIS包。SSIS可以从Excel中读取数据,您可以让它向数据库查询额外的信息,以构建一个不会违反FK约束的有效数据集。