使用SQL2k5,我有一個臨時表,其中包含將填充許多其他表的列。例如,像這樣的語句:TSQL快照隔離
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
如果這是最好的解決辦法,有什麼做這種方式的缺點?
我認爲這是我的最佳課程。謝謝。 – heath 2010-01-06 17:33:16