我有超过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进行deserilize。如果有更好的方法,请告诉我。
答案 0 :(得分:2)
您可以使用FOR XML clause在SQL Server中选择数据作为XML。这样的查询将返回一行,其中包含生成的XML的单个列。 Here's an example
您可以使用以下内容:
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组:
<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查询来获取数据,并将数据格式代码保存在一个地方。
答案 1 :(得分:0)
如果您想在SQL Server中执行此操作,可以使用以下选项:
您也可以使用上一个答案中提到的JSON图书馆在java中完成。