让我们假设表和数据
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服务器返回数据(如
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-driver?
答案 0 :(得分:0)
可以对您的查询执行此操作,但由于最终目标是生成分层对象模型,因此研究对象/关系映射器可以更好地花费时间和精力来自动化大部分繁重的工作。可用的内容取决于客户端应用程序的编程语言; Wikipedia列有几个。