当存在外键关系时,如何使用SQL Server批量插入插入到多个表中?
我的意思是桌子是这样的,
CREATE TABLE [dbo].[UndergroundFacilityShape]
([FacilityID] [int] IDENTITY(1,1) NOT NULL,
[FacilityTypeID] [int] NOT NULL,
[FacilitySpatialData] [geometry] NOT NULL)
CREATE TABLE [dbo].[UndergroundFacilityDetail]
([FacilityDetailID] [int] IDENTITY(1,1) NOT NULL,
[FacilityID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Value] [nvarchar](255) NOT NULL)
所以每个UndergroundFacilityShape可以有多个UndergroundFacilityDetail。问题是 FacilityID 在插入完成之前才定义,因为它是一个标识列。如果我将数据批量插入到 Shape 表中,则无法将其与 C# 应用程序中的详细数据进行匹配。
我猜测解决方案是运行 SQL 语句来找出下一个标识值是什么,然后自己填充这些值并关闭批量插入的标识列?请记住,只有一个人将运行此应用程序来插入数据,并且很少执行此操作,因此我们不必担心身份值冲突或类似的情况。
我正在尝试导入数千条记录,使用标准插入大约需要 3 分钟,但批量插入只需几秒钟。
将来我期望导入比“数千”条记录大得多的数据。
事实证明这很简单。获取每个表上的当前标识值,然后将它们填充到 DataTable 中,并在使用时自行递增它们。我还必须确保使用正确的价值观来维持关系。就是这样。我是否关闭身份列似乎并不重要。
我已经在实时数据上使用这个工具有一段时间了,它工作得很好。
虽然导入时间不超过 3 秒(而不是 3 分钟),但这是非常值得的,而且我希望在某个时候收到更大的数据集。
那么,如果不止一个人同时使用该工具怎么办?是的,我预计会出现问题,但我们永远不会出现这种情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)