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