我将旧数据库中的数据导入新数据库。其中一个表有超过3000万行,我必须从OLD DB获得相同的PK值。迁移后,我必须开发用于将数据插入该表的存储过程。我的问题是:我应该将PK(迁移后)设置为Identity还是当我插入数据时,找到PK的Max值并将其递增1,然后插入? 如果我应该使用第一种方法,我该怎么办?我尝试通过Management Studio进行此操作,但由于超时异常,它总是失败。如果我应该使用第二种方法,它是否是线程安全的并且会降低性能吗?
谢谢!
此致 Turik
答案 0 :(得分:0)
建议的方法是在加载数据时加载所有索引(包括主键),因为它会加快负载并减少事务日志的负载。但是,您需要确保在加载之前将IDENTITY
属性添加到新表中,并使用SET IDENTITY_INSERT .... ON
允许您插入旧的标识值。
对于此示例,我们假设这是您的目标表:
CREATE TABLE dbo.YourTable(YourTableId INT IDENTITY(1,1), SomeData INT)
然后,您需要使用IDENTITY_INSERT...ON
以确保可以从源表中插入数据:
SET IDENTITY_INSERT dbo.YourTable ON
--copy data from source table
INSERT INTO dbo.YourTable
(YourTableId, SomeData)
SELECT 1,1
UNION
SELECT 2,2
迁移数据后,您需要再次关闭IDENTITY_INSERT
:
SET IDENTITY_INSERT dbo.YourTable OFF
添加主键:
ALTER TABLE dbo.[YourTable] ADD CONSTRAINT PK_YourTable_YourTableID PRIMARY KEY CLUSTERED (YourTableID)
然后重新设置主键,RESEED
值等于当前最大PK值
DBCC CHECKIDENT ('[YourTable]', RESEED, 2)
运行此命令后,将为YourTableId
INSERT INTO dbo.YourTable
SELECT 3