利用 .NET Framework 1.1 的 Microsoft.VisualBasic.Strings.StrConv 方法,封裝為 COM 可呼叫元件,再透過 SQL Server sp_OA* 預存程序在 T-SQL 中直接呼叫,實現資料庫層面的中文簡繁轉換。
sn.exe, csc.exe, regasm.exe)。sysadmin 權限(建立擴展預存程序需求)。sn.exe -k C:\snkey.snk
C:\Microshaoft.cs)using System;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: AssemblyKeyFile("snkey.snk")]
namespace Microshaoft
{
public interface IStrings
{
string StringConvert(string x);
}
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Strings : IStrings
{
public string StringConvert(string x)
{
return Microsoft.VisualBasic.Strings.StrConv(
x,
Microsoft.VisualBasic.VbStrConv.TraditionalChinese,
System.Globalization.CultureInfo.CurrentCulture.LCID);
// 亦可加參數控制繁轉簡/簡轉繁
}
}
}
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe /t:library /out:C:\Microshaoft.dll C:\Microshaoft.cs /r:C:\Windows\Microsoft.Net\Framework\v1.1.4322\Microsoft.VisualBasic.dll
C:\Windows\Microsoft.Net\Framework\v1.1.4322\regasm.exe C:\Microshaoft.dll /tlb:Microshaoft.tlb /codebase
CREATE FUNCTION UDF_StringConvert(@input VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @obj INT, @hr INT, @result VARCHAR(8000)
EXEC @hr = sp_OACreate 'Microshaoft.Strings', @obj OUT
IF @hr = 0
BEGIN
EXEC @hr = sp_OAMethod @obj, 'StringConvert', @result OUT, @input
EXEC sp_OADestroy @obj
END
RETURN @result
END
GO
SELECT dbo.UDF_StringConvert('阿姐速度極高') -- 回傳繁體:'阿姐速度極高'
sp_OA* 系列預存程序需啟用 Ole Automation Procedures 選項(sp_configure 'Ole Automation Procedures', 1; RECONFIGURE)。此方案在 SQL Server 2000 環境下提供了無需修改應用程式即可實現中文繁簡轉換的實用路徑。