Ini adalah pendekatan yang sangat baik dan telah diterima dengan cukup baik. Ada beberapa pendekatan dan ini entri blog menggambarkan banyak dari mereka.
Salah satu pendekatan menarik yang ada adalah menggunakan CLR untuk melakukan pekerjaan untuk Anda yang secara signifikan akan mengurangi kompleksitas kueri dengan trade-off menjalankan kode eksternal. Berikut adalah contoh tampilan kelas dalam majelis.
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);
}
}
}
Dan itu akan membuat kueri sedikit lebih seperti ini.
SELECT CategoryId,
dbo.strconcat(ProductName)
FROM Products
GROUP BY CategoryId ;
Yang jelas sedikit lebih sederhana. Ambillah untuk apa nilainya :)
Selamat siang!