sql >> Database >  >> RDS >> Sqlserver

Door komma's gescheiden resultaatset + SQL-query

Dit is een zeer goede benadering en is redelijk goed geaccepteerd geworden. Er zijn verschillende benaderingen en deze blogbericht beschrijft veel van hen.

Een interessante benadering die bestaat, is het gebruik van de CLR om het werk voor u te doen, wat de complexiteit van de query aanzienlijk zal verminderen met de afweging van het uitvoeren van externe code. Hier is een voorbeeld van hoe de klas eruit zou kunnen zien in de assembly.

using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.IO;
using Microsoft.SqlServer.Server;

[Serializable]
[SqlUserDefinedAggregate(Format.UserDefined,  MaxByteSize=8000)]
public struct strconcat : IBinarySerialize{

    private List values;

    public void Init()    {
        this.values = new List();
    }

    public void Accumulate(SqlString value)    {
        this.values.Add(value.Value);
    }

    public void Merge(strconcat value)    {
        this.values.AddRange(value.values.ToArray());
    }

    public SqlString Terminate()    {
        return new SqlString(string.Join(", ", this.values.ToArray()));
    }

    public void Read(BinaryReader r)    {
        int itemCount = r.ReadInt32();
        this.values = new List(itemCount);
        for (int i = 0; i <= itemCount - 1; i++)    {
            this.values.Add(r.ReadString());
        }
    }

    public void Write(BinaryWriter w)    {
        w.Write(this.values.Count);
        foreach (string s in this.values)      {
            w.Write(s);
        }
    }
}

En dat zou een zoekopdracht meer als deze opleveren.

SELECT CategoryId,
           dbo.strconcat(ProductName)
      FROM Products
     GROUP BY CategoryId ;

Wat natuurlijk een stuk eenvoudiger is. Neem het voor wat het waard is :)

Goede dag!




  1. Is de volgorde van invoegingen gespecificeerd voor INSERT IGNORE ... SELECT?

  2. SQL-telrijen in een tabel

  3. kan ik cron-taak configureren voor localhost?

  4. JPA @NamedQuery met bitsgewijze AND (&) als criteria