Используя 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]
Этот процесс продолжается через многочисленные таблицы, подобные этой. Как вы можете видеть, я не включаю предложение WHERE в SELECT из промежуточной таблицы, так как эта таблица усекается в конце процесса. Однако это оставляет возможность для другого процесса добавлять записи в эту промежуточную таблицу в середине этой транзакции, и эти записи не будут содержать ранее заполненные FK. Хотел бы я выдать это заявление, чтобы предотвратить это?
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
Если это лучшее решение, каковы его недостатки?