需要關於此的一些想法..我有一個Temp_Table與一些數據。根據Temp_Table中的數據,我將刪除表(外鍵)中的相關行,然後將Temp-table中的所有數據插入到table1中。像下面的例子。在同一事務中插入和刪除?
知道我們在這裏只用了幾百行,而不是每天添加或更改太多的行也很重要。而且,我正在SSIS中的分離任務中運行插入/刪除語句,該語句正在工作。
問題!! 以什麼方式可以放置一個鎖在Server2.Table1(獨佔我supose)並在放開該鎖之前同時運行Delete和Insert語句?我不希望任何人在執行刪除/插入操作時讀取或寫入表1。請注意,刪除操作必須在 Insert語句之前運行。
有沒有一種方法是SSIS來做到這一點?或者我可以在開始時使用Begin事務並在語句後提交事務?我擔心Delete和Insert會在同一個事務中同時運行,是嗎?可能有一些好方法可以做到這一點,但我還沒有弄清楚。
我還沒有用我最好的朋友Google找到一個明確的答案。我想絕對肯定之前,我嘗試一些東西..
DELETE Table1
FROM Table1 t1
INNER JOIN (
SELECT Column2 FROM Temp_Table
GROUP BY Column2
) t2 ON t1.Column2 = t2.Column2
INSERT INTO Table1
SELECT (Column1, Column2...)
FROM Temp_Table
THX /安德烈亞斯
將這些語句置於BEGIN TRANSACTION ... COMMIT之間不會同時運行它們(它們將一起提交/回滾)。取決於您的隔離級別,所獲取的任何鎖定將保留在位,直到事務完成或回退 – SteveR
讓我們先問您到底想要完成什麼。您正在刪除表中與臨時表相關的所有行,然後插入臨時表結果。如果行存在,你真的試圖執行UPDATE,如果它們不存在則插入?您可以使用臨時表來跟蹤要修改的記錄,以便鎖定不會影響,或者可以按照以下建議使用輸出,或者? – Matt
我應該補充一點,如果你確實需要在整個表上獲得一個鎖,你可以在刪除之前把它拋出:SELECT 1 FROM Table1 WITH(TABLOCKX) – SteveR