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

Възможно ли е да се използват дефинирани от потребителя агрегати (clr) с функции на прозореца (над)?

Прав си, че е трудно да се намери нещо в документацията. Но търсейки уебсайта на Connect, успях да намеря този скъпоценен камък:

Днес можете да използвате CLR агрегати с клауза OVER и PARTITION BY точно като обикновените агрегатни функции. След като имаме поддръжка за функции на прозореца...

Което беше отговор от Microsoft.

Въпреки това, търсенето в сайта Connect беше това, което направих, докато чаках моята остаряла машина да създаде нов проект за база данни и да създаде този агрегат:

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

След това стартирайте този скрипт:

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)

Което произвежда:

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

Което е дълъг път да се каже - лесно бихте могли да откриете отговора сами, само като опитате го.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. datetime срещу smalldatetime в SQL Server:Каква е разликата?

  2. има ли предимство varchar(500) пред varchar(8000)?

  3. Персонализирани низове за формат на дата/час, поддържани от FORMAT() в SQL Server

  4. Как OBJECTPROPERTY() работи в SQL Server

  5. Синтаксис на for-loop в SQL Server