事务中使用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);