Wie bekomme ich spezifische datasätze und es sind alle verwandten datasätze in SQL?

Ich habe mehr als 3 Tische. Aber aus Gründen der Einfachheit, nehmen Sie 3 Produkte, ProductBrands und ProductAttributes. Jeder Podukt hat null oder mehr Marken und null oder mehr Attribute. Jetzt habe ich,

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

Aber ich möchte alle Produktattribute und Marken im selben SQL auswählen. Ich denke das

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

So erstellen Sie GetProductAttributesInJSONOrXML und GetProductBrandsInJSONOrXML funstions? So dass in meiner app kann ich leicht deserilize die xml oder json. Bitte lassen Sie mich wissen, ob es einen besseren path gibt.

Sie können data in SQL server als XML mit der FOR XML-Klausel auswählen. Eine solche Abfrage gibt Ihnen eine einzelne Zeile mit einer einzigen Spalte mit dem generierten XML zurück. Hier ist ein Beispiel .

Du könntest so etwas benutzen:

 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 

Um XML-Schema so etwas zu bekommen, mit einer Produktgruppe für jede Zeile:

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

Es gibt viele verschiedene Optionen mit der Klausel, um das Schema genau so zu formatieren, wie es dir gewünscht wird, obwohl es ein bisschen Arbeit für kompliziertere Designs machen könnte.

Es gibt keine Möglichkeit, JSON auf SQL server zu generieren, ohne Code zu verwenden, um es explizit mit Textfunktionen zu generieren. Dies wäre kompliziert und wahrscheinlich nicht sehr gut, da SQL server nicht für die Textverarbeitung optimiert ist. Die Erstellung von JSON erfolgt am besten auf der Anwendungsebene.

Wenn du sowohl JSON als auch XML aussenden musst, schlage ich vor, beide auf der Anwendungsebene zu erzeugen. Dies ermöglicht es, nur eine SQL-Abfrage zu benötigen, um Ihre data zu erhalten und den dataformatierungscode an einem einzigen Ort zu halten.

Wenn du es in SQL server machen willst, hier sind die Optionen:

  1. Generiere JSON-String in Abfragen
  2. memoryn Sie JSON-String in einer Spalte als String für schnellere Rendering

Sie können es auch in Java, indem Sie die JSON libarary in der vorherigen Antwort erwähnt.