私は最近、JSONシリアル化を使用してパラメーター配列をSQL Serverストアドプロシージャに渡し、そこで逆シリアル化して必要な値を抽出するチームに参加しました。つまり、各ストアドプロシージャにはVARCHAR(MAX)タイプの'@Parameters'パラメーターがあります。コマンドを作成および実行するフレームワークはC#で記述されており、標準の.NETタイプ(SqlCommand、SQlParameter)などを使用します。
シリアル化されたコンテンツの長さがしきい値よりも長い場合、ストアドプロシージャは適切に実行されていませんが、例外は発生していません。何も起こらないようです。SQLプロファイラーの実行SQLServerでストアドプロシージャを実行する試みがないことを確認しました。
例:あるケースでは、シリアル化されるプロパティが8つ以下のタイプのインスタンスが30個だけあります。シリアル化は成功し、値はSqlCommandのパラメーターコレクションのsqlパラメーターに割り当てられます(パラメーターは1つだけです)。コマンドは実行されますが、何も起こりません。タイプの出現回数が少ない場合、それは成功します。成功しない場合、例外は発生しません。
使用方法:Newtonsoftが提供するSQL Server 2008 C#.NET4.0JSONシリアル化。コード内のSqlParameterは、varcharmaxとして作成されます。クライアントサーバーアーキテクチャ-仲介サービスはありません。
SqlCommandを使用してSQLパラメーターとして渡されるJSONシリアル化値の制限を知っている人はいますか、またはこの動作を引き起こしている可能性があるものについて何か考えがありますか?