将用户友好的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表,然后试图在运行时添加一些列,如Creator
和Adding Date
,当我试图运行Adapter.Update(ModifiedDatatable)
时,它抛出一个异常
当传递带有修改行的DataRow集合时,Update需要一个有效的UpdateCommand
当我尝试使用SqlBulkCopy
插入此Excel工作表时,它按预期工作
Excel表外键截图
但是强迫最终用户在导入之前在Excel工作表中放入一些外键是不对的。
注意:
很抱歉上传截图到Tinypic,但我不能在这里上传,因为我的Rep点。
Thanks in advance
在这个场景中,我将创建一个SSIS包。SSIS可以从Excel中读取数据,您可以让它向数据库查询额外的信息,以构建一个不会违反FK约束的有效数据集。