задача:
на стороне sql открыта транзакция внутри которой что то происходит.
внутри этой транзакции нужно вызвать clr процедуру на C# которая что то куда то запишет
и в случае отката транзакции, действия которые были выполнены в процессе работы clr функции
не должны откатится.
для теста накидал метод на C#
namespace Future.SQLCLR
{
public class Exception
{
public static string ConnectionString
{
get
{
//string ret = "context connection = true";//
string ret = "Data Source = server; Initial Catalog = database; Integrated Security = True";
return ret;
}
}
[SqlFunction()]
public static void TestInsert(SqlString inputParam)
{
using (var cn = new SqlConnection(ConnectionString))
{
try
{
cn.ConnectionString = "Enlist=false";
cn.Open();
var cmd = new SqlCommand("insert into table(field)" +
"select field from table_1", cn);
cmd.ExecuteNonQuery();
}
catch (System.Exception)
{
throw;
}
finally
{
cn.Close();
}
}
}
}
.......
}
CREATE PROCEDURE [audit].[TestInsert]
(
@msg nvarchar(2048)
)
AS EXTERNAL NAME CLR.[SQLCLR.Exception].TestInsert
begin tran
exec [TestInsert] 'msg'
rollback
получаю ошибку System.Data.SqlClient.SqlException: Transaction context in use by another session.