让我们假设表和数据
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
那是只有在"父"更改时,将该"父"表的值写入结果集,以其他方式将这些字段设置为null。
SQL Server(2014/2016)是否可能(有效)?也许有一些内置功能?
还是网络协议sql-server< ->。网络驱动器?
可以对您的疑问做到这一点,但是由于最终目标是生成层次结构对象模型,因此您的时间和精力将花在研究最自动的对象/关系映射的花费中,这将是自动化的。繁重的举重。可用的内容取决于客户端应用程序的编程语言;Wikipedia的列表涵盖了几个。