2017-03-04 4 views
0

のは、テーブルとデータクエリ関係を効率的

CREATE TABLE #tA (id int, fieldA varchar(16)) 
CREATE TABLE #tB (idA int, id int, fieldB varchar(16)) 
CREATE TABLE #tC (idB int, id int, fieldC varchar(16)) 

INSERT into #tA VALUES (1, 'A1'), (2, 'A2') 
INSERT into #tB VALUES (1, 1, 'A1-B1'), (1, 2, 'A1-B2'), (2, 3, 'A2-B1') 
INSERT into #tC VALUES (1, 1, 'A1-B1-C1'), (2, 2, 'A1-B2-C1'), (2, 3, 'A1-B2-C2'), (3, 4, 'A2-B1-C1') 

を想定してみましょう私は

SELECT A.fieldA, B.fieldB, C.fieldC 
FROM #tA as A 
JOIN #tB as B ON b.idA=A.id 
JOIN #tC as C ON c.idB=b.id 

ですべてのデータを完全に関係を照会することができ、その結果は、オン

fieldA fieldB fieldC 
A1  A1-B1 A1-B1-C1 
A1  A1-B2 A1-B2-C1 
A1  A1-B2 A1-B2-C2 
A2  A2-B1 A2-B1-C1 

ですクライアント側

のようなオブジェクトモデルを作成したい/必要があります
{ 
    name: "A1", 
    Bs: [ 
    { 
     name: 'A1-B1', 
     Cs: [{name: 'A1-B1-C1'}] 
    }, 
    { 
     name: 'A1-B2', 
     Cs: [{name: 'A1-B2-C1'}, {name: 'A1-B2-C2'}] 
... 

もちろん、実際のテーブルにはより多くのフィールドと行があるため、すべてのフィールドを複数回送信するためのネットワークのオーバーヘッドを削減したいと考えています。
これは、データが「親」が変更された場合にのみです

fieldA fieldB fieldC 
A1  A1-B1 A1-B1-C1 
null A1-B2 A1-B2-C1 
null null A1-B2-C2 
A2  A2-B1 A2-B1-C1 

のようなSQL Serverから返された場合には、(S)値を書き込む十分な(そして実際にオブジェクト・モデルを構築しやすい)でしょうその "親"テーブルを結果セットに追加し、otherをそれらのフィールドにnullに設定します。

これは(効率的に)SQL Server(2014/2016)で可能ですか?たぶんそれのためのいくつかの組み込み関数ですか?
それはネットワークプロトコルのSQL-server < - > .net-driverに組み込まれていますか?

+0

"したがって、すべてのフィールドを複数回送信するためのネットワークのオーバーヘッドを削減したいと考えています。これはおそらく最適化では役に立たない試みです。 –

答えて

0

最終的な目標は階層的なオブジェクトモデルを作成することなので、ほとんどの重労働を自動化するオブジェクト/リレーショナルマッパーの研究には時間と労力がかかります。使用可能なのは、クライアントアプリケーションのプログラミング言語に依存します。 Wikipediaにはいくつかのリストがあります。