2010-06-15 109 views
2

進出口工作在創建誰使用使用MS SQL Server 2008的INSERT SELECT語句的查詢:INSERT SELECT語句和回滾SQL

INSERT INTO TABLE1(COL1,COL2)SELECT COL1,COL2 FROM TABLE2

眼下這個查詢的excecution是一個事務裏

僞代碼:

try 
{ 
    begin transaction; 
    query; 
    commit; 
} 
catch 
{ 
rollback; 
} 

如果TABLE2擁有約行40米,在希的時刻如果在INSERT的中間出現錯誤,INSERT SELECT語句本身會進行回滾還是需要使用事務來保持數據完整性?

有必要使用交易嗎?或SQL SERVER它自己使用這種類型的句子的事務。

回答

2

單個SQL命令是原子的。它會完成或回滾。

如果完成,包裝該命令的事務可以將其回滾。如果它在交易之外,則在完成時提交。

1

在這種情況下,SQL Server會執行隱式事務。插入語句是原子的,要麼整個語句會成功,要麼失敗時會回滾。請記住ACID

2

語句是原子的 - 如果語句沒有完成,則什麼都不會改變。另外,documentation有關於insert語句中的失敗一些更具體的信息:

如果INSERT加載與SELECT,任何違規被加載的值發生了規則或約束的多行導致完整的語句是停止,並且不加載行。