ストアドプロシージャで書くには複雑すぎるような場合の代替手段として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 ClassSqlStringのような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;
GO5.動作確認(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