有效查询关系



让我们假设表和数据

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的列表涵盖了几个。

最新更新