1

わかりました、これは少し複雑なので、できるだけ単純化しようとします。代わりのトリガーを使用した SQL Server ビューがあります。Trigger は CLR UDF (C#) を呼び出し、それを MyUDF と呼びます。MyUDF は、リテラル接続文字列を使用して 2 番目の接続を開こうとします。

using (SqlConnection connection2 = new SqlConnection(newConnString)) { ...

接続文字列が良好であることを確認しました。UDF が Update Trigger 以外でも正常に動作することも確認しました。ただし、Update Trigger によって呼び出されると、以下に示す DotNet エラーが発生します。この KB に従って DTC を有効にしようとしましたが、うまくいきませんでした: http://msdn.microsoft.com/en-us/library/dd327979.aspx

アクセス許可のために、2 番目の接続を開く必要があります。現在の接続には、必要なクエリを実行するための十分な権限がない可能性があるため、使用できません"context connection=true"

質問: このような状況で 2 番目の接続を開く方法はありますか?

DotNet エラー (SQL Server 2008 Standard、Windows 2008 x86、DotNet 4) は次のとおりです。

A .NET Framework error occurred during execution of user-defined routine or aggregate "MyUDF": 
System.Data.SqlClient.SqlException: Transaction context in use by another session.
System.Data.SqlClient.SqlException: 
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
   at System.Data.SqlClient.SqlInternalConnectionTds.PropagateTransactionCookie(Byte[] cookie)
   at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx)
   at System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx)
   at System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction)
   at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at UserDefinedFunctions.MyUDF(SqlString data)
4

0 に答える 0