我正在尝试从TableA批量插入到TableB,这将(如果我可以使其工作)成为使用2008R2在30/60分钟周期内进行大规模UPSERT的一部分。
TableB有一个针对它的主键设置&一个独特的指数。
我不能放弃&在int上重新创建IDENTITY,因为有问题的表是第三方应用程序的一部分&添加IDENTITY将导致应用程序出现问题。
我希望沿着使用MAX的路线走下去(即使有可能带来的问题,但总的来说这不应该导致环境中的许多问题)但是我遇到了一个独特的问题使用下面的表格索引;
DECLARE @V int
SELECT @V = MAX(PRIMARY_KEY) from TABLEB
INSERT INTO TABLEB ([PRIMARY_KEY],[COL1],[COL2],[COL3])
SELECT (ROW_NUMBER() OVER (ORDER BY COL1 ASC)) + @V As PRIMARY_KEY,COL1,COL2,COL3
FROM TABLEA
我的另一个想法是使用一个保存最后使用的int值的表,这将通过一个sproc&更新。 sproc输出将是下一个可用....我认为这不会起作用,虽然考虑到我实际上想要实现的目标。
该计划的最终游戏是在六个合并声明中包含所有(因为这只是大约1%),但是最初如果我能得到这个至少工作它将是一个开始。
欢迎任何想法或建议。
由于
鲍勃
答案 0 :(得分:0)
我已经解决了原因是一个小学生的错误,我忽略了/没有注意到另一个专栏的聚集索引,我当时认为这是无关紧要的....我们生活和放弃学习。
因此,为了澄清是否有人感兴趣,以下工作正如我所期望的那样,添加上面提到的列...在这个虚拟场景中它将是col4;
DECLARE @v int
SELECT @v = MAX(PRIMARY_KEY) FROM TABLEB
INSERT INTO TABLEB ([PRIMARY_KEY],[COL1],[COL2],[COL3],[COL4])
SELECT (ROW_NUMBER() OVER (ORDER BY [PRIMARY_KEY] ASC)) + @v ,COL1,COL2,COL3,COL4
FROM TABLEA
由于
鲍勃