これは「ベストプラクティス」の問題です。私たちはこの話題について内部的な議論をしており、より多くの読者から意見を得たいと考えています。SQLを使用してJSON文字列を返す
通常の列と行を使用して従来のMS SQL Server
テーブルにデータを保存する必要があります。私は時々ウェブアプリケーションにDataTable
を返す必要があり、それ以外の時にはJSON
文字列を返す必要があります。
現在、テーブルを中間層に戻し、JSON
文字列に解析します。これはほとんどの部分ではうまくいくようですが、大規模なデータセット(データを解析してテーブルを返さない)でしばらく時間がかかることがあります。
DataTable
またはJSON
文字列を選択的に返すようにストアドプロシージャを改訂することを検討しています。私は単に@isJson bit
パラメータをSPに追加します。
ユーザーではなく、テーブルの列を望んでいた場合、SPはこのようなクエリを実行しますが:もちろん
{id:"1342",name:"row1"},{id:"3424",name:"row2"}
、ユーザー缶:
DECLARE @result varchar(MAX)
SELECT @result = COALESCE(@results ',', '') + '{id:"' + colId + '",name:"' + colName + '"}'
FROM MyTable
SELECT @result
これは、次のようなものを作成しますまた、@isJsonパラメーターにfalseを渡してテーブルを取得します。
私は、データストレージが影響を受けておらず、既存のビューやその他のプロセスも影響を受けていないことを明確にしたいと思います。これは、一部のストアドプロシージャの結果のみを変更したものです。
私の質問は以下のとおりです。
- は誰もが大規模なアプリケーションでこれをしようとしていますか?もしそうなら、結果は何でしたか?
- あなたはこのアプローチでどのような問題があると思いますか?
- この方法でストアドプロシージャを変更したり、中間層の文字列を解析したりする以外に、SQL ServerのテーブルからJSONに移動する方が、より高速な方法がありますか?
中間層の詳細を教えてください。何がそんなに長くかかりますか?コンパイルされたコードですか?レコードセットをJSONに変換するアプリケーションを書くことは非常に可能であり、十分な性能を備えているはずです。 – ErikE
あなたの特殊文字を適切にエスケープすると仮定すると、これは実行可能です...しかし...あなたはどうですか? SQL Serverはひどい文字列解析エンジンであり、比較的効率的な方法で常に準拠XMLを吐き出すことができるビルトインXMLエンジンを持っています。 –
@ErikEほとんどのテーブルはjsonに非常に迅速に変換されます。これはFullCalendar用のテーブルを解析しているために発生しました。真ん中の解析ではテーブルを取り、フィールドと行を循環させて文字列を構築します。おそらく真ん中でいくつかのことを修正してより速く実行することはできますが、SQLを実行することでプロセスの余計なステップを避けることができればどうでしょうか? – davids