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

Er det muligt at bruge brugerdefinerede aggregater (clr) med vinduesfunktioner (over)?

Du har ret i, at det er svært at finde noget i dokumentationen. Men ved at søge på Connect-webstedet lykkedes det mig at finde denne perle:

I dag kan du bruge CLR-aggregater med OVER-klausul og PARTITION BY ligesom almindelige aggregatfunktioner. Når vi har understøttelse af vinduesfunktioner...

Hvilket var et svar fra Microsoft.

Men at søge på Connect-webstedet var, hvad jeg gjorde, mens jeg ventede på, at min gamle maskine skulle oprette et nyt databaseprojekt og oprette dette aggregat:

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

Og kør så dette script:

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)

Som producerer:

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

Hvilket er langt at sige - du kunne nemt have fundet svaret for dig selv bare ved at prøve det.




  1. Nye og udviklende PostgreSQL Enterprise-funktioner med seneste udgivelser

  2. Sådan konverteres små bogstaver til store bogstaver i SQL Server - STORE ()

  3. PostgreSQL 8.4 giver DML-privilegier på alle tabeller til en rolle

  4. Sådan returneres alle upålidelige udenlandske nøglebegrænsninger i SQL Server (T-SQL-eksempel)