Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Rozdzielany przecinkami zestaw wyników + zapytanie SQL

To bardzo dobre podejście i zostało całkiem dobrze przyjęte. Istnieje kilka podejść i ten post na blogu opisuje dużo z nich.

Jednym z interesujących rozwiązań, które istnieje, jest użycie środowiska CLR do wykonania pracy za Ciebie, co znacznie zmniejszy złożoność zapytania dzięki kompromisowi polegającemu na uruchamianiu kodu zewnętrznego. Oto próbka tego, jak klasa może wyglądać w zespole.

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

A to sprawiłoby, że zapytanie byłoby trochę bardziej podobne do tego.

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

Co jest oczywiście nieco prostsze. Weź to za to, co jest warte :)

Dzień dobry!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź wszystkie ciągi, które mają co najmniej X znaków, uporządkuj według podobieństwa

  2. Sprawdź składnię wszystkich procedur składowanych?

  3. SQL Server:Zastąp nieprawidłowe znaki XML z pola VARCHAR(MAX)

  4. Znajdź typ danych kolumn zwróconych w zestawie wyników w SQL Server

  5. Wybór narzędzia do monitorowania serwera SQL dopasowanego do Twoich potrzeb