2007.10.10

[SQLCLR] SqlString型とSqlChars型

SQLServer2005では、
VBやC#など、.NETの言語によって
ストアドプロシージャが作成できるようになりました。
このSQL CLRと呼ばれる機能を利用して、
テキストログ出力するプロシージャを作成したところ、
なぜか4000文字までしか出力されませんでした。

理由に、なかなか気付かなかったのですが、
これはSqlString型とSqlChars型の違いでした。

http://msdn.microsoft.com/msdnmag/issues/07/02/SQLRegex/default.aspx?loc=jp

上記のリンク先で書かれているように、
SqlStringはnvarchar(4,000) の扱いとなり、
SqlChars はnvarchar(max)となります。

具体的なコードで示すと、以下になります。
(引数のデータ型が違います)

'旧コード 4000文字までしか扱えない
Public Shared Sub OutputLog(ByVal sLog As SqlString)

……… メイン処理 ………

End Sub

'新コード nvarchar(max)まで扱える
Public Shared Sub OutputLog(ByVal sLog As SqlChars)

……… メイン処理 ………

End Sub

リンク先に書かれていることですが、
SqlCharsの方が扱える文字数は多いものの、
パフォーマンスはSqlStringの方が良いそうです。
場合によって使い分ける必要があります。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
admin