Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apakah mungkin menggunakan agregat yang ditentukan pengguna (clr) dengan fungsi jendela (over)?

Anda benar bahwa sulit untuk menemukan apa pun dalam dokumentasi. Tetapi mencari di situs web Connect, saya berhasil menemukan permata ini:

Hari ini, Anda dapat menggunakan agregat CLR dengan klausa OVER dan PARTITION BY seperti fungsi agregat biasa. Setelah kami mendapat dukungan untuk fungsi jendela...

Yang merupakan tanggapan dari Microsoft.

Namun, pencarian di situs Connect adalah apa yang saya lakukan ketika saya menunggu mesin lama saya untuk membuat proyek database baru dan membuat agregat ini:

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

Dan kemudian jalankan skrip ini:

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)

Yang menghasilkan:

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

Jauh sekali untuk mengatakannya - Anda dapat dengan mudah menemukan jawabannya sendiri hanya dengan mencoba itu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menginstal Azure Data Studio di Mac

  2. Nilai NULL di dalam klausa NOT IN

  3. Tambahkan Kolom ke Tabel yang Ada di Database SQL Server

  4. Bagaimana Memetakan Kolom Input dan Output secara dinamis di SSIS?

  5. Cara Memodifikasi Periode Retensi Change Data Capture (CDC) di SQL Server - Tutorial SQL Server