Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Набор от резултати, разделени със запетая + SQL заявка

Това е много добър подход и е доста добре приет. Има няколко подхода и този публикация в блог описвамного от тях.

Един интересен подход, който съществува, е използването на CLR, за да свърши работата вместо вас, което значително ще намали сложността на заявката с компромиса от изпълнение на външен код. Ето пример за това как може да изглежда класът в сборката.

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

И това ще направи заявка малко по-подобна на тази.

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

Което очевидно е доста по-просто. Вземете го за това, което си струва :)

Добър ден!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Плюсове и минуси на използването на SqlCommand Prepare в C#?

  2. Как да покажете запис няколко пъти, включително интервали от дни въз основа на началната и крайната му дата

  3. Моментни снимки на базата данни на SQL Server -1

  4. Как да импортирате bak файл в SQL Server Express

  5. Как да се свържа с SQL Server 2008 с qt?