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

Bộ kết quả được phân cách bằng dấu phẩy + Truy vấn SQL

Đây là một cách tiếp cận rất tốt và đã được chấp nhận khá tốt. Có một số cách tiếp cận và điều này bài đăng trên blog mô tả rất nhiều trong số họ.

Một cách tiếp cận thú vị tồn tại là sử dụng CLR để thực hiện công việc cho bạn, điều này sẽ giảm đáng kể độ phức tạp của truy vấn với việc đánh đổi việc chạy mã bên ngoài. Đây là một ví dụ về lớp có thể trông như thế nào trong assembly.

using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.IO;
using Microsoft.SqlServer.Server;

[Serializable]
[SqlUserDefinedAggregate(Format.UserDefined,  MaxByteSize=8000)]
public struct strconcat : IBinarySerialize{

    private List values;

    public void Init()    {
        this.values = new List();
    }

    public void Accumulate(SqlString value)    {
        this.values.Add(value.Value);
    }

    public void Merge(strconcat value)    {
        this.values.AddRange(value.values.ToArray());
    }

    public SqlString Terminate()    {
        return new SqlString(string.Join(", ", this.values.ToArray()));
    }

    public void Read(BinaryReader r)    {
        int itemCount = r.ReadInt32();
        this.values = new List(itemCount);
        for (int i = 0; i <= itemCount - 1; i++)    {
            this.values.Add(r.ReadString());
        }
    }

    public void Write(BinaryWriter w)    {
        w.Write(this.values.Count);
        foreach (string s in this.values)      {
            w.Write(s);
        }
    }
}

Và điều đó sẽ tạo ra một truy vấn giống như thế này hơn một chút.

SELECT CategoryId,
           dbo.strconcat(ProductName)
      FROM Products
     GROUP BY CategoryId ;

Rõ ràng là đơn giản hơn một chút. Hãy lấy nó cho những gì nó đáng giá :)

Chúc một ngày tốt lành!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. máy chủ sql được liên kết máy chủ với oracle trả về không tìm thấy dữ liệu nào khi dữ liệu tồn tại

  2. Tại sao thực thi các thủ tục được lưu trữ nhanh hơn truy vấn SQL từ một tập lệnh?

  3. Cách tạo một thủ tục được lưu trữ trong SQL Server

  4. SQL Server 2016:Tạo bảng từ tập lệnh SQL

  5. Chương trình dòng lệnh hoặc tập lệnh đơn giản để sao lưu cơ sở dữ liệu máy chủ SQL là gì?