2009-05-29 14 views
1

Eine Kategorie kann viele Produkte enthalten. Ich muß StoredProcedure bauen, die alle Kategorien mit einigen Daten aus Produkten zurück in ein Feld kombiniert:Felder aus verknüpften Tabellen kombinieren

 
SP Result: 
idCategory Name ProductNames   ProductQuantities 
1   Cat1 Procut1,Product2  24,32 
2   Cat2 ProductX,ProductY 0,61 

Product und ProductQuantities sind varchar Felder mit kombiniertem (verketteten) Feldwerten aus verbundenen Produkttabellen. Das ist, was ich habe im DB:

 
Category table: 
idCategory Name 
1   Cat1 
2   Cat2 

Product table: 
idProduct idCategory Name  Quantity 
1   1   Product1 24 
2   1   Product2 32 
3   2   ProductX 0 
4   2   ProductY 61 

Ich würde auch Funktion haben möchte, die "Product1, Product2" für Eingangsparameter idCategory = 1, wie folgt zurück:

 
SELECT idCategory, 
     dbo.NamesFn(idCategory) AS ProductNames, 
     dbo.QuantitiesFn(idCategory) AS ProductQuantities 
FROM Category 

vielleicht eine Funktion das gibt Table Result zurück, also würde der Beitritt nur einmal gemacht werden, nicht in jedem Fn (weil das vereinfachtes Beispiel ist, in der realen App muss ich 4-5 kombinierte Felder haben oder noch mehr in der Zukunft)?

Wie schreibe ich SQL/SP & Fn? Ich verwende MS SQL2005

Antwort

2

Es gibt mehrere Lösungen zum Verketten von Zeilen mit SQL Server. Siehe this und this.

Diese Abfrage erzeugt das Ergebnis setzen Sie gefragt:

select c.idCategory, c.Name, 
    replace(
     (select p.Name as [data()] 
     from Product p 
    where p.idCategory = c.idCategory 
    for xml path ('') 
), ' ', ', ') as ProductNames, 
    replace(
     (select p.Quantity as [data()] 
     from Product p 
    where p.idCategory = c.idCategory 
    for xml path ('') 
), ' ', ', ') as ProductQuantities 
from Category c 

Edited hinzufügen: Diese Abfrage das Ergebnis produziert:

idCategory Name ProductNames   ProductQuantities 
1   Cat1 Product1, Product2 24, 32 
2   Cat2 ProductX, ProductY 0, 61 
+0

i schon diese Beispiele durch google gefunden, aber nicht weiß, muss erstellen Funktion, die Ergebnis der Tabelle zurückgibt, und wie diese Ergebnisse in SP-Ergebnisse enthalten –

+0

Einer der Links enthält den Code für eine solche Funktion ... –

+0

@Tom H aber nicht für die Funktion mit Tabelle Ergebnis –

Verwandte Themen