0

我有超过 3 张桌子。但为简单起见,我们取 3 个产品、ProductBrands 和 ProductAttributes。每个产品都有零个或多个品牌和零个或多个属性。我现在有,

SELECT P.Name,P.ID, P.Desc FROM Products

但我想在同一个 SQL 中选择所有产品属性和品牌。我在想这个,

SELECT P.Name,P.ID, P.Desc, GetProductAttributesInJSONOrXML(P.ID), GetProductBrandsInJSONOrXML(P.ID)   FROM Products

如何创建 GetProductAttributesInJSONOrXML 和 GetProductBrandsInJSONOrXML 函数?因此,在我的应用程序中,我可以轻松地对 xml 或 json 进行反序列化。请让我知道是否有更好的方法。

4

2 回答 2

2

您可以使用FOR XML 子句将 SQL Server 中的数据选择为 XML 。这样的查询将返回单行,单列包含生成的 XML。这是一个例子

你可以使用这样的东西:

SELECT Product.Name, Product.ID, Product.Desc, Attribs.Attribute, Brands.Brand 
FROM Products Product
LEFT JOIN ProductBrands Brands ON Product.ID = Brands.ProductID
LEFT JOIN ProductAttributes Attribs ON Product.ID = Attribs.ProductID
FOR XML AUTO, ELEMENTS

要获得类似这样的 XML 模式,每一行都有一个产品组:

<Product>
  <Name></Name>
  <ID></ID>
  <Desc></Desc>
  <Attribs>
    <Attribute></Attribute>
  </Attribs>
  <Brands>
    <Brand></Brand>
  </Brands>
</Product>
...

该子句有很多不同的选项可以让模式完全按照您想要的方式格式化,尽管对于更复杂的设计可能需要一些工作。

没有办法在 SQL Server 上生成 JSON,除非使用代码通过文本函数显式生成它。这会很复杂,而且可能性能不太好,因为 SQL Server 没有针对文本处理进行优化。生成 JSON 最好在应用程序级别完成。

如果您需要同时发出 JSON 和 XML,我建议在应用程序级别同时生成。这允许只需要一个 SQL 查询来获取您的数据,并将数据格式化代码保存在一个地方。

于 2013-07-15T19:28:39.773 回答
0

如果您想在 SQL Server 中执行此操作,请使用以下选项:

  1. 在查询中生成 JSON 字符串
  2. 将 JSON 字符串作为字符串存储在列中以加快渲染速度

您也可以使用上一个答案中提到的 JSON 库在 java 中执行此操作。

于 2013-07-15T19:30:12.693 回答