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

Czy można używać agregatów zdefiniowanych przez użytkownika (clr) z funkcjami okna (over)?

Masz rację, że znalezienie czegokolwiek w dokumentacji jest trudne. Ale przeszukując witrynę Connect, udało mi się znaleźć ten klejnot:

Obecnie można używać agregacji CLR z klauzulą ​​OVER i PARTITION BY, tak jak zwykłych funkcji agregujących. Gdy mamy wsparcie dla funkcji okien...

To była odpowiedź Microsoftu.

Jednak wyszukiwanie w witrynie Connect było tym, co zrobiłem, gdy czekałem, aż moja stara maszyna utworzy nowy projekt bazy danych i utworzy ten agregat:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.IO;
using Microsoft.SqlServer.Server;

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.UserDefined,MaxByteSize = 2000)]
public struct SqlAggregate1 : IBinarySerialize
{
    private SqlString last;
    public void Init()
    {
        // Ignore
    }

    public void Accumulate(SqlString Value)
    {
        last = Value;
    }

    public void Merge (SqlAggregate1 Group)
    {
        // Ignore
    }

    public SqlString Terminate ()
    {
        // Put your code here
        return last;
    }

    public void Read(BinaryReader r)
    {
        last = new SqlString(r.ReadString());
    }

    public void Write(BinaryWriter w)
    {
        w.Write(last.ToString());
    }
}

A następnie uruchom ten skrypt:

select dbo.SqlAggregate1(Column2) OVER (PARTITION BY Column1)
from (select 1,'abc' union all select 1,'def' union all
      select 2,'ghi' union all select 2,'jkl') as t(Column1,Column2)

Co daje:

------------
abc
abc
ghi
ghi

To długa droga — mogłeś łatwo znaleźć odpowiedź dla siebie, po prostu spróbował to.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pięć najważniejszych kwestii dotyczących projektowania indeksu bazy danych w programie SQL Server

  2. jak skonfigurować plik konfiguracyjny hibernacji dla serwera sql?

  3. Jak zwrócić tylko Date z typu danych DateTime serwera SQL?

  4. Jak obliczyć wiek (w latach) na podstawie daty urodzenia i getDate()

  5. Wprowadzenie do tabel tymczasowych w SQL Server