diff --git a/Experiments/Debugging tSQLt.tdf b/Experiments/Debugging tSQLt.tdf
new file mode 100644
index 000000000..86a69c6de
Binary files /dev/null and b/Experiments/Debugging tSQLt.tdf differ
diff --git a/Experiments/Experiments.ssmssqlproj b/Experiments/Experiments.ssmssqlproj
index 73eb07cae..7ea928e3d 100644
--- a/Experiments/Experiments.ssmssqlproj
+++ b/Experiments/Experiments.ssmssqlproj
@@ -66,6 +66,12 @@
LIKE4000.sql
+
+
+
+
+ MSSQL Defect Try-Catch Invalidates Transaction.sql
+
diff --git a/Experiments/MSSQL Defect Try-Catch Invalidates Transaction.sql b/Experiments/MSSQL Defect Try-Catch Invalidates Transaction.sql
new file mode 100644
index 000000000..6497e537a
--- /dev/null
+++ b/Experiments/MSSQL Defect Try-Catch Invalidates Transaction.sql
@@ -0,0 +1,20 @@
+PRINT 'No TRY...CATCH:';
+EXEC ('BEGIN TRAN');
+SELECT XACT_STATE() AS [XACT_STATE()],@@TRANCOUNT AS [@@TRANCOUNT];
+GO
+IF(XACT_STATE()<>0)ROLLBACK;
+GO
+
+
+
+GO
+PRINT 'In TRY...CATCH:';
+BEGIN TRY
+EXEC ('BEGIN TRAN');
+END TRY
+BEGIN CATCH
+END CATCH;
+SELECT XACT_STATE() AS [XACT_STATE()],@@TRANCOUNT AS [@@TRANCOUNT];
+GO
+IF(XACT_STATE()<>0)ROLLBACK;
+GO
diff --git a/Experiments/SM query.sql b/Experiments/SM query - read trace table.sql
similarity index 100%
rename from Experiments/SM query.sql
rename to Experiments/SM query - read trace table.sql
diff --git a/Source/Run_Methods.sql b/Source/Run_Methods.sql
index fc2a97683..2395b8896 100644
--- a/Source/Run_Methods.sql
+++ b/Source/Run_Methods.sql
@@ -81,6 +81,7 @@ BEGIN
BEGIN
EXEC @SetUp;
END;
+
EXEC (@TestExecutionCmd);
IF(EXISTS(SELECT 1 FROM #ExpectException WHERE ExpectException = 1))
diff --git a/Tests/Run_Methods_Tests.class.sql b/Tests/Run_Methods_Tests.class.sql
index 741decb42..a05898d83 100644
--- a/Tests/Run_Methods_Tests.class.sql
+++ b/Tests/Run_Methods_Tests.class.sql
@@ -2441,33 +2441,42 @@ GO
/*-----------------------------------------------------------------------------------------------*/
GO
----[@tSQLt:SkipTest]('TODO: need to review handling of unexpected changes to the tSQLt transaction')
CREATE PROCEDURE Run_Methods_Tests.[test produces meaningful error when pre and post transactions counts don't match]
AS
BEGIN
- EXEC tSQLt.NewTestClass 'MyInnerTests'
+ EXEC tSQLt.NewTestClass 'MyInnerTestsA'
+ EXEC('CREATE PROCEDURE MyInnerTestsA.[test should execute outside of transaction] AS BEGIN TRAN;');
+
+ EXEC tSQLt.ExpectException @ExpectedMessage = 'SOMETHING RATHER', @ExpectedSeverity = NULL, @ExpectedState = NULL;
+ EXEC tSQLt.Run 'MyInnerTestsA.[test should execute outside of transaction]';
+
+END;
+GO
+/*-----------------------------------------------------------------------------------------------*/
+GO
+
+--[@tSQLt:SkipTest]('TODO: need to review handling of unexpected changes to the tSQLt transaction for NoTransaction tests')
+CREATE PROCEDURE Run_Methods_Tests.[test produces meaningful error when pre and post transactions counts don't match in NoTransaction test]
+AS
+BEGIN
+ EXEC tSQLt.NewTestClass 'MyInnerTestsB'
EXEC('
--[@'+'tSQLt:NoTransaction](DEFAULT)
-CREATE PROCEDURE MyInnerTests.[test should execute outside of transaction] AS BEGIN TRAN;SELECT * FROM fn_dblog(NULL,NULL) WHERE [Transaction ID] = (SELECT LL.[Transaction ID] FROM fn_dblog(NULL,NULL) LL JOIN sys.dm_tran_current_transaction AS DTCT ON DTCT.transaction_id = LL.[Xact ID]);
+CREATE PROCEDURE MyInnerTestsB.[test should execute outside of transaction] AS BEGIN TRAN;SELECT * FROM fn_dblog(NULL,NULL) WHERE [Transaction ID] = (SELECT LL.[Transaction ID] FROM fn_dblog(NULL,NULL) LL JOIN sys.dm_tran_current_transaction AS DTCT ON DTCT.transaction_id = LL.[Xact ID]);
');
EXEC tSQLt.ExpectException @ExpectedMessage = 'SOMETHING RATHER', @ExpectedSeverity = NULL, @ExpectedState = NULL;
BEGIN TRY
- EXEC tSQLt.Run 'MyInnerTests.[test should execute outside of transaction]';
+ EXEC tSQLt.Run 'MyInnerTestsB.[test should execute outside of transaction]';
END TRY
BEGIN CATCH
- SELECT * FROM fn_dblog(NULL,NULL) WHERE [Transaction ID] = (SELECT LL.[Transaction ID] FROM fn_dblog(NULL,NULL) LL JOIN sys.dm_tran_current_transaction AS DTCT ON DTCT.transaction_id = LL.[Xact ID]);
+ SELECT * FROM fn_dblog(NULL,NULL) WHERE [Transaction ID] = (SELECT LL.[Transaction ID] FROM fn_dblog(NULL,NULL) LL JOIN sys.dm_tran_current_transaction AS DTCT ON DTCT.transaction_id = LL.[Xact ID]);
END CATCH;
-
-
END;
GO
/*-----------------------------------------------------------------------------------------------*/
GO
-EXEC tSQLt.Run 'Run_Methods_Tests.[test produces meaningful error when pre and post transactions counts don''t match]';
-GO
-SELECT * FROM tSQLt.TestResult;
/*--
Transaction Tests