Article View: cn.bbs.comp.database
Article #192�� C# ���� SQL Server 2005 ���Զ���ۺϺ��� zz
From: Dem����ɫ�н�����
Date: Sat, 25 Jul 2009 04:41
Date: Sat, 25 Jul 2009 04:41
114 lines
5044 bytes
5044 bytes
http://www.cnblogs.com/RChen/archive/2006/11/15/sql2k5_clr.html
�� SQL �У�������Ҫ����ݰ�������Զ���ľۺϲ����������ö�������һϵ�б�ʾ
ID �����֣���Ĭ��ֻ�� SUM, MAX, MIN, AVG �ȾۺϺ����� SQL Server 2005 ����
���˱�д CLR ���йܴ����֧�֣����ǿ�������д�Զ���ľۺϺ���
�������������ݣ�
Age Name
20 ����
21 ����
20 ����
22 ����
18 Ǯ��
������õ�
Age Name
18 Ǯ��
20 ����,����
21 ����
22 ����
��Ҫʵ��һ���ۺϺ��� StrJoin, �书�����ö��������ַ�
Ԥ�ڵ� SQL ������£�
select
Age,
dbo.StrJoin(Name) as Name
from
SomeTable
Ҫʵ����������� Visual Studio 2005 ����һ�� C# �� Database ��Ŀ����Ŀģ��
ѡ�� SQL Server ��ݿ⡣����Ŀ�����������һ�� Aggregate ������������£�
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=false,
IsInvariantToNulls=true,
IsInvariantToOrder=false,
IsNullIfEmpty=true,
MaxByteSize=8000
)]
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("");
}
#region IBinarySerialize Members
public void Read(System.IO.BinaryReader r) {
_result = new StringBuilder(r.ReadString());
}
public void Write(System.IO.BinaryWriter w) {
w.Write(_result.ToString());
}
#endregion
}
���ﲻ������ϸ�IJ������裬����Ӧ�ÿ����ѵ��ܶࡣ
��ԭ���Ǹ������ṩ�˼���ģ�淽����Init(), Accumulate(), Merge(),
Terminate().
������Ҫ������������д�Լ��ľۺ������ɡ��⼸�������ĺ���ֱ��dz�ʼ����ɨ��
��һ����¼ʱ���ϲ�����ֹɨ�衣
��Ҫע�����¼��㣺
1. �Զ���ۼ������У����Ƿ��ص���ݻᱻ���л�Ȼ��ת���� SQL Server �У���һЩ
��ֵ���� Framework �ṩ��Ĭ�ϵ����л����ƣ�������һЩ CLR �����ͱ��� string
�ͱ����Լ�ʵ�����л����ƣ�Ҳ����ʵ�� IBinarySerialize �ӿڡ�
2. ����ֵ�� SQL Server �ﶨ��ı���һ���ܵ� 8000 �ֽڵij������ơ�
3. SQL Server 2005 �������ü����Լ���Ϊ "SQL Server 2005(90)", ������������
����
'EXTERNAL' ������������������Ҫ����ǰ��ݿ�ļ��ݼ�������Ϊ��ߵ�ֵ��
�����ô˹��ܡ��йش洢��� sp_dbcmptlevel ����Ϣ����μ����
4. ��Ҫ���� SQL Server 2005 �� CLR ��֧�֣����û�дĻ�����
ִ���������
EXEC sp_configure 'clr enabled', 1
RECONFIGURE WITH OVERRIDE
GO
--
http://bbs.sjtu.edu.cn/file/comic/122390669464913.jpg
[m[1;35m�� ��Դ:����ˮ˼Դ bbs.sjtu.edu.cn��[FROM: 58.35.145.142][m
Technical Details
Message-ID:
<4h9AFj$cCX@bbs.sjtu.edu.cn>Path:
arc1-ca.pugleaf.net!g2news2.google.com!news2.google.com!news.glorb.com!newsgate.cuhk.edu.hk!news.cn99.com!news.shec6.edu.cn!SJTUShow Full Headers
Complete Article Headers
X-Google-Thread: 4df683fd51,81235f7dc7bc4cf0,start X-Google-Attributes: gid4df683fd51,public,usenet X-Google-NewGroupId: yes X-Google-Language: Chinese,GB Path: arc1-ca.pugleaf.net!g2news2.google.com!news2.google.com!news.glorb.com!newsgate.cuhk.edu.hk!news.cn99.com!news.shec6.edu.cn!SJTU From: ZAKU.bbs@bbs.sjtu.edu.cn (Dem����ɫ�н�����) Newsgroups: cn.bbs.comp.database Subject: �� C# ���� SQL Server 2005 ���Զ���ۺϺ��� zz Date: 25 Jul 2009 04:41:45 GMT Organization: ��ˮ˼Դ Message-ID: <4h9AFj$cCX@bbs.sjtu.edu.cn> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit X-Filename: database/M.1248496893.A