事務中使用return會回滾事務嗎?sql
答案:不會,若是在事務中沒有顯示提交或回滾事務邊return,事務不會被提交或回滾,在C#中,若是沒有使用鏈接池,則事務在鏈接斷開和銷燬時被強制回滾,若是使用鏈接池,則事務在鏈接被再次使用時調用的exec sp_reset_connection存儲過程清理掉。若是該鏈接沒有被再次使用或刪除,則事務一直存在,便會一直鎖住相關資源不釋放,照常日誌變大,鏡像和複製異常等狀況。測試
測試code:
--建立測試表
CREATE TABLE TB5
(
ID INT
)ui
測試C# CODEspa
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(); sb.DataSource = "192.168.1.101"; sb.InitialCatalog = "db1"; sb.Password = "Auto@sql"; sb.UserID = "sa"; sb.IntegratedSecurity = false; sb.ConnectTimeout = 60; sb.Pooling = true; int i = 1000; while (i > 0) { using (SqlConnection conn = new SqlConnection(sb.ConnectionString)) { conn.Open(); SqlCommand comm = conn.CreateCommand(); comm.CommandText = @" BEGIN TRAN TR1 INSERT INTO TB5(ID) SELECT 1 RETURN "; comm.CommandType = System.Data.CommandType.Text; comm.ExecuteNonQuery(); conn.Close(); } i--; Console.WriteLine(i); } System.Threading.Thread.Sleep(60 * 1000);