Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Có thể sử dụng tổng hợp do người dùng xác định (clr) với các chức năng cửa sổ (qua) không?

Bạn nói đúng rằng thật khó để tìm thấy bất cứ điều gì trong tài liệu. Nhưng khi tìm kiếm trên trang web Connect, tôi đã tìm thấy viên ngọc này:

Ngày nay, bạn có thể sử dụng các tổng hợp CLR với mệnh đề OVER và PARTITION BY giống như các hàm tổng hợp thông thường. Sau khi chúng tôi có hỗ trợ cho các chức năng cửa sổ ...

Đó là phản hồi từ Microsoft.

Tuy nhiên, tìm kiếm trên trang Connect là điều tôi đã làm trong khi chờ máy cũ của mình tạo một dự án cơ sở dữ liệu mới và tạo tổng hợp này:

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

Và sau đó chạy tập lệnh này:

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)

Sản xuất:

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

Đó là một chặng đường dài để nói - bạn có thể dễ dàng tìm ra câu trả lời cho chính mình chỉ bằng cách thử nó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tải DLL 'SqlServerSpatial.dll'

  2. Đường ống được đặt tên là gì?

  3. Học máy có ý nghĩa như thế nào đối với các chuyên gia cơ sở dữ liệu

  4. Làm cách nào để bạn thay đổi kiểu dữ liệu của một cột trong SQL Server?

  5. Làm thế nào để kiểm tra kết quả công việc gói SSIS sau khi nó đã hoàn thành việc thực thi?