我無法測試它並且現在就得到我自己的解決方案,而且我還沒有在MSDN或谷歌上找到這些信息。是否需要在事務中封裝單個合併語句(使用插入,刪除和更新)?
我被質疑是否需要在一個事務中插入,刪除和更新給定表中的記錄的合併語句(如果插入完成後,例如在更新過程中發生故障),或者如果有的操作失敗,整個合併也失敗了。
如果我們包含一個事務,也許它不會造成危害,但爲了好奇,我們希望更多地瞭解合併內部。
我無法測試它並且現在就得到我自己的解決方案,而且我還沒有在MSDN或谷歌上找到這些信息。是否需要在事務中封裝單個合併語句(使用插入,刪除和更新)?
我被質疑是否需要在一個事務中插入,刪除和更新給定表中的記錄的合併語句(如果插入完成後,例如在更新過程中發生故障),或者如果有的操作失敗,整個合併也失敗了。
如果我們包含一個事務,也許它不會造成危害,但爲了好奇,我們希望更多地瞭解合併內部。
SQL Server中的任何語句本身都是一個事務。
也就是說,它是原子的:一切成功或都失敗
明確的事務將被用於將多個單個原子語句成一個大原子事務。
這是MERGE的美妙之處:不需要顯式的事務和3個單獨的語句。
如果顯式未啓動,SQL Server中的所有DML語句都會在隱式事務中運行。當然,您仍然可以將其包裝在自己的明確交易中,但不應該需要
每個查詢總是在事務中運行。如果您不創建交易,則查詢本身具有自己的交易。如果出現任何問題,整個查詢將回滾。
如果你想做更多的錯誤處理,你可能需要一個事務,但它不是必要的數據庫的一致性。
和其他人一樣,你不需要一個事務,但是你應該考慮一下你的事務隔離級別或者提示,如果你正在做一些像upsert這樣的事情。 Using merge for upserts can cause conflicts in the default configuration.