2017-03-04 50 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'}] 
... 

當然,實際的表格有更多的字段和行,因此我想減少網絡上多次發送所有字段的開銷。
這將是足夠了(其實更容易建立一個對象模型),如果數據是從SQL Server像

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(2014/2016)可能嗎?也許有一些內置的功能呢?
或者,即使內置到網絡協議sql-server < - > .net驅動程序?

+0

「因此,我想減少網絡上多次發送所有字段的開銷」。這可能是無用的優化嘗試。 –

回答

0

對於您的查詢可能會這樣做,但由於最終目標是生成分層對象模型,所以您花費的時間和精力將花費在研究可自動執行大部分繁重工作的對象/關係映射器上。有什麼可用取決於客戶端應用程序的編程語言; Wikipedia有一個列表涵蓋幾個。