Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取特定记录和it';SQL中的所有相关记录是什么?_Sql_Sql Server_Tsql_Sql Server 2008 R2 - Fatal编程技术网

如何获取特定记录和it';SQL中的所有相关记录是什么?

如何获取特定记录和it';SQL中的所有相关记录是什么?,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我有三张以上的桌子。但为了简单起见,让我们看3个产品,ProductBrands和ProductAttributes。每个产品都有零个或多个品牌和零个或多个属性。现在我有 SELECT P.Name,P.ID, P.Desc FROM Products 但是我想在同一个SQL中选择所有产品属性和品牌。我在想, SELECT P.Name,P.ID, P.Desc, GetProductAttributesInJSONOrXML(P.ID), GetProductBrandsInJSONOrXM

我有三张以上的桌子。但为了简单起见,让我们看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。请告诉我是否有更好的方法。

您可以使用选择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,除非使用代码通过文本函数显式生成JSON。这将很复杂,而且可能不会很好地执行,因为SQL Server没有针对文本处理进行优化。生成JSON最好在应用程序级别完成


如果需要同时发出JSON和XML,我建议在应用程序级别同时生成这两种格式。这允许只需一个SQL查询即可获取数据,并将数据格式代码保存在一个位置。

如果要在SQL server中执行此操作,请选择以下选项:

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

  • 您也可以在java中使用前面的答案中提到的JSON库来实现这一点。

    在应用程序中创建JSON/xml,而不是在DB级别。只需选择所需的所有数据。虽然您可以使用SQL server选择xml,但请查找for xml子句。此博客链接可能是一个有用的参考:@EstericScreenName,您能找到它吗?