sql >> Database teknologi >  >> RDS >> Sqlserver

Komma-separeret resultatsæt + SQL-forespørgsel

Dette er en meget god tilgang og er blevet ret godt accepteret. Der er flere tilgange, og dette blogindlæg beskriver meget af dem.

En interessant tilgang, der findes, er at bruge CLR til at gøre arbejdet for dig, hvilket vil reducere kompleksiteten af ​​forespørgslen markant med afvejningen af ​​at køre ekstern kode. Her er et eksempel på, hvordan klassen kan se ud i forsamlingen.

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);
        }
    }
}

Og det ville give en forespørgsel lidt mere som denne.

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

Hvilket selvfølgelig er en del enklere. Tag det for hvad det er værd :)

God dag!




  1. Standard Dato/Time Format Strings Understøttet af FORMAT() i SQL Server

  2. Filtrering af brugerinput

  3. Hvordan RAND() virker i MariaDB

  4. SQL-forespørgsel med ON DUPLICATE KEY UPDATE-afklaring nødvendig