我正在临时表中上传大量Excel记录。然后我需要对这些行求和,然后用PK总结到主表。
我在Insert之后创建了一个触发器,它检查插入是否已存在于主表中(Not existing将插入,现有将更新该行中的所有列)。
所以为了触发这个TRIGGER,我需要插入另一个临时表
INSERT INTO TEMPTBL (select SUM(...)...* from temptable)
然后触发器将插入/更新到主表。
我想知道这是正确的方法还是仅使用单个TEMP表然后使用SP来使用1 CURSOR FETCH(用于更新现有行)进行检查,然后使用Insert进行检查。
提前感谢您的阅读。只需知道哪些是理想/更快,因为这些将处理多用户(请不要介意死锁:D)
答案 0 :(得分:3)
你建议的两种方法都是程序性的(逐行),但我认为应该有一套基于集合的解决方案(所有记录一次)用于你正在做的事情。
而不是触发器或游标,一次插入所有记录,并在insert语句中包括一个检查以排除表中已存在的任何记录。类似的东西:
INSERT INTO YourTable (Column1, Column2...)
SELECT Column1, Column2...
FROM TempTable tt
WHERE NOT EXISTS (
SELECT 1
FROM YourTable yt
WHERE tt.ID = yt.ID
)
编辑:
对于您的更新,您可以执行类似的操作。在插入之前,将临时表连接到现有表,并更新匹配的记录:
UPDATE yt
SET Column1 = tt.Column1, Column2 = tt.Column2
FROM
YourTable yt JOIN
TempTable tt ON tt.ID = yt.ID