データアクセスに関連するSQLCLR集計の制限について理解しています。言いましたが、結果をテーブルに保存する方法(回避策)はありますか? SQLCLR集計内でなければなりません。あなたがC#の機能の準備ができて集計結果を持っていたらSQLCLRユーザー定義集計(UDA)内のデータアクセス
答えて
は、なぜあなたはユーザー定義集計(UDA)内のテーブルに集計結果を格納する必要がありますか?それはあなたが無地のT-SQLを使用して、テーブルに結果を格納できることを考えれば少しは意味になります:
INSERT INTO SchemaName.TableName (Col1, Col2, ...)
SELECT tab.SomeColumn, SchemaName.CustomAggregate(tab.OtherColumn)
FROM SchemaName.TableName tab
GROUP BY tab.SomeColumn;
あなたは組み込み集約関数のいずれかの結果を格納しているかのように基本的に、これは同じように動作します、のような:SUM
、MIN
、MAX
、COUNT
、AVG
など
ただし、はは、外部接続を、いくつかの奇妙な理由のためにこれを行うだけで使用する必要がなかった場合(つまりないContext Connection = true;
)でTerminate()
メソッドを使用します。
ではなく、の接続が現在のトランザクションコンテキストに参加しようとしていることに注意してください(また、参加はデフォルトの動作です)。つまり、接続文字列には、次のキーワードと値(Enlist = false;
)が必要です。私は成功しTerminate()
方法で次のように使用され、私も「データアクセスは、このコンテキストで許可されていませんになっていた。どちらのコンテキストがDataAccessKindで関数やメソッドマークされていないEnlist=false;
を追加する前にしたように、これは作業を行います.ReadまたはSystemDataAccessKind.Readは、テーブル値関数のFillRowメソッドからデータを取得するためのコールバックであるか、UDT検証メソッドです。 "エラー。
using (SqlConnection _Connection =
new SqlConnection("Trusted_Connection=true; Enlist=false;"))
{
using (SqlCommand _Command = _Connection.CreateCommand())
{
_Command.CommandText = "SELECT TOP 1 * FROM sys.objects;";
_Connection.Open();
_Command.ExecuteNonQuery();
}
}
も定期的/外部接続を行うことEXTERNAL_ACCESS
としてマークされるアセンブリが必要であることに注意してください。しかし、それはないは、データベースがTRUSTWORTHY ON
に設定する必要がありません:あなたは、ちょうど最後にEXTERNAL ACCESS ASSEMBLY
許可ログインGRANT
を非対称鍵それからログインを作成し、そのDLL /アセンブリからmaster
における非対称鍵を作成し、アセンブリに署名し、 。
UDA内のデータにアクセスすることはできません。例外:System.InvalidOperationException:このコンテキストではデータアクセスが許可されていません。 –
@ T.Nguyen説明を追加するために私の答えを更新しました。 ConnectionStringに 'Enlist = false;'を追加するとうまくいきます。 –
Enlist = false;完璧に動作します。ありがとうございました! –
は、なぜあなたは、データベース内のこれらの凝集体を保存するために(データベース操作用)C#のADO.NETを使用しないでください。これはSQL CLR関数内で行われ、データベースからSQL CLR関数を1回呼び出すと、集計がいくつかのテーブルに格納されます。
- 1. Oracle PIVOT句のユーザー定義集計関数
- 2. Oracleユーザー定義型のパッケージ定義内
- 3. エンタープライズライブラリのデータアクセスをブロック設計の決定
- 4. 行列の行の合計がuda
- 5. PHP:ユーザー管理、データアクセス
- 6. JSP、JDBCデータアクセス層の設計
- 7. データアクセス/ユーザー権限の管理
- 8. サイトのユーザー統計の収集
- 9. MongoDB/Mongoose集計、ステージ結果が未定義
- 10. ユーザー定義のパス
- 11. ユーザー定義フィールド(UDF)のデータベースを設計する方法は?
- 12. ユーザー定義の文字列リテラル対。他のユーザー定義リテラル
- 13. udaアルゴリズム構造
- 14. Apache Spark SQLのユーザー定義集計関数(UDAF)から複数の配列を戻す
- 15. ユーザーリストと値の集計を含むテーブルにユーザーと値の集計リスト
- 16. 集計とリポジトリ集計の決定方法
- 17. SQL Server 2008のユーザー定義集計 - MaxByteSize = -1を使用して展開する方法は?
- 18. Spark SQL UDAF(ユーザー定義集計関数)はPython APIで使用できますか?スパークのよう
- 19. データベース内の特定のレコードを集計する
- 20. SSRS:集計集計合計
- 21. ユーザー定義関数
- 22. ジャンゴ1.4定義ユーザー
- 23. データベース設計:データベース内のエンティティ間の関係を定義する
- 24. クローラ内のリクエストリストからの集計データ
- 25. データベース内のすべてのユーザー定義関数のSQLリスト
- 26. 「ユーザー設定」データベーステーブルの設計
- 27. リスト内の要素を集計する
- 28. パッケージ内のカスタム集計関数
- 29. C++ 11ユーザー定義のリテラル
- 30. ユーザー定義マップの作成
あなたは正確に何を達成しようとしていますか?あなたがしたいことではないかもしれないので、プロセスを説明してください。 –
皆様のお返事ありがとうございます。しかし、私はコード/デザインのレビューや批評を求めていません。私は、ユーザー定義集計関数のコンテキスト内でデータにアクセスするための回避策があることを知りたいだけです。 –