使用 SQL2k5,我有一个临时表,其中包含将填充许多其他表的列。例如,这样的语句:
INSERT INTO [appTable1] ([colA], [colB])
SELECT [appTable1_colA], [appTable1_colB]
FROM [stageTable]
然后,[appTable1] 上的触发器会将新插入的行的标识列值填充回 [stageTable];对于这个例子,我们会说它是 [stageTable].[appTable1_ID] 然后作为 FK 插入到其他表中。更多类似的陈述如下:
INSERT INTO [appTable2] ([colA], [colB], [colC], [appTable1_FK])
SELECT [appTable2_colA], [appTable2_colB], [appTable2_colC], [appTable1_ID]
FROM [stageTable]
这个过程继续通过许多这样的表。如您所见,我没有在暂存表中的 SELECT 中包含 WHERE 子句,因为该表在流程结束时被截断。但是,这留下了另一个进程在此事务的中间向此临时表添加记录的可能性,并且这些记录将不包含先前填充的 FK。我是否要发布此声明以防止这种情况发生?:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
如果这是最好的解决方案,那么这样做的缺点是什么?