ストアドプロシージャで書くには複雑すぎるような場合の代替手段としてSQL CLRと云うものがあります。

.Netの基本的なクラス群を利用して複雑な処理を書くことができます。

ストアドプロシージャでは処理速度を向上できなかったとしても、SQL CLRでの処理速度向上が期待できます。

SQL CLR 利用方法(Visual Studio 2005使用)

1. SQL Serverプロジェクトを作成します。
2. そのプロジェクトにユーザー定義の関数を作成します。

<例>

Partial Public Class UserDefinedFunctions
<Microsoft.SqlServer.Server.SqlFunction()> _
    Public Shared Function HelloWorld() As SqlString
        ' コードをここに追加してください
        Return New SqlString("Hello World!!")
    End Function
End Class

SqlStringのようなSQL Serverネイティブ互換型をつかわずに、

Netネイティブ型のStringを使っても自動的にマーシャリングしてくれるみたい。

3. 作成したユーザ定義の関数をDBに配置します。

[ビルド]->[xxxxの配置]
この作業はユーザ定義の関数を変更するたびに必要です。

4. アセンブリの実行をSQLServerに許可させる

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO

sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

5.動作確認(SQL Serverプロジェクト内)

ソリューションエクスプローラの[Test Scriptフォルダ]->[Test.sql]にHelloWorldを呼び出すコードを書きます。

select dbo.HelloWorld()

[デバッグ]->[デバッグ開始]
出力に「Hello World!!」と表示されたらOK
これでデータベースにユーザ定義関数が正常に登録されたので、dbo.HelloWorld()で呼び出すことができます。

ついでに

static変数も利用できるっぽいです。
その場合、セキュリティ権限の変更が必要になります。

ALTER ASSEMBLY assembly_name
WITH PERMISSION_SET = EXTERNAL_ACCESS