using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.UserDefined,
IsInvariantToDuplicates = true
, IsInvariantToNulls = true
, IsInvariantToOrder = false
, IsNullIfEmpty = true
, MaxByteSize = 8000
, Name = "strJoin")]
public struct strJoin : IBinarySerialize
{
private StringBuilder _result;
public void Init()
{
_result = new StringBuilder();
}
public void Accumulate(SqlString Value)
{
if (Value.IsNull)
{
return;
}
else
{
if (_result.Length > 0)
{
_result.Append(",");
}
_result.Append(Value.Value);
}
}
public void Merge(strJoin Group)
{
_result.Append(Group._result);
}
public SqlString Terminate()
{
if (_result.Length > 0)
{
return new SqlString(_result.ToString());
}
return new SqlString("");
}
public void Read(System.IO.BinaryReader r)
{
_result = new StringBuilder(r.ReadString());
}
public void Write(System.IO.BinaryWriter w)
{
w.Write(_result.ToString());
}
}
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.UserDefined,
IsInvariantToDuplicates = true
, IsInvariantToNulls = true
, IsInvariantToOrder = false
, IsNullIfEmpty = true
, MaxByteSize = 8000
, Name = "strJoin")]
public struct strJoin : IBinarySerialize
{
private StringBuilder _result;
public void Init()
{
_result = new StringBuilder();
}
public void Accumulate(SqlString Value)
{
if (Value.IsNull)
{
return;
}
else
{
if (_result.Length > 0)
{
_result.Append(",");
}
_result.Append(Value.Value);
}
}
public void Merge(strJoin Group)
{
_result.Append(Group._result);
}
public SqlString Terminate()
{
if (_result.Length > 0)
{
return new SqlString(_result.ToString());
}
return new SqlString("");
}
public void Read(System.IO.BinaryReader r)
{
_result = new StringBuilder(r.ReadString());
}
public void Write(System.IO.BinaryWriter w)
{
w.Write(_result.ToString());
}
}
Sql Server :
CREATE AGGREGATE [dbo].[strJoin]
(@Value [nvarchar](4000))
RETURNS[nvarchar](4000)
EXTERNAL NAME [SqlServerProject].[strJoin]
GO
Example:
Select A.B ,dbo.StrJoin(A.C)
from A
GROUP BY A.B