大致分为两个步骤:
1. 用C#开发类库
建立一个普通的类库项目,下面是一个实例:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SqlServer.Server;
namespace com.shangsi.ShsSqlUtility
{
public class SqlEncoding
{
public SqlEncoding()
{
}
[SqlFunction(DataAccess = DataAccessKind.None)]
/// <summary>
/// 内码转换
/// </summary>
/// <param name="encode"></param>
/// <returns></returns>
public static string ConvertPageCode(string OriginalStr, int FromCodePage, int ToCodePage)
{
if (OriginalStr == null) return null;
OriginalStr = OriginalStr.Trim();
if (OriginalStr == "") return "";
Encoding TargetEncoding = Encoding.GetEncoding(ToCodePage);
Encoding OriginalEncoding = Encoding.GetEncoding(FromCodePage);//("iso8859-1"); //在SQL Server 查询分析器中输入sp_helpsort 可以看到SQL Server存储使用的字符集合
Byte[] OriginalBytes = OriginalEncoding.GetBytes(OriginalStr);
return TargetEncoding.GetString(OriginalBytes);
}
}
}
2. 把函数注册到SQL Server中
drop assembly [com.shangsi.ShsSqlUtility] create assembly [com.shangsi.ShsSqlUtility] FROM 'd:\lib\ShsSqlUtility.dll' drop function ConvertCP CREATE FUNCTION ConvertCP(@OriginalStr nvarchar(1000),@FromCodePage int, @ToCodePage int) RETURNS nvarchar(800) AS External name [com.shangsi.ShsSqlUtility].[com.shangsi.ShsSqlUtility.SqlEncoding].ConvertPageCode EXEC sp_configure 'clr enabled',1 go RECONFIGURE go select dbo.ConvertCP(null, 936, 1252)
如果不支持“Extrnal”需更改数据库的兼容性至少到SQL Server2005