都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

便利な SQL の関数とか、構文とか、その他色々まとめてみる - その7 ( COM を ストアドプロシージャ-から呼び出してみる) -

今回のやることを説明してみる

 ストアドプロシージャーから COM を呼び出してみます。

使用する環境を説明してみる

 今回は、Microsoft Azure 上の仮想サーバではなく、私の Windows 8.1 Update1、64ビット 上で 動作している  SQL Server 2014 です。

試す内容を説明してみる

 ストアドから COM を呼び出すには、 OLE オートメーション ストアド プロシージャ (Transact-SQL) を使用します。COM の作成、呼び出し、破棄に関しては下記のメソッドを使用します。

  他にもいくつかメソッドはありますが、今回は上記三つのメソッドを使用してみたいと思います。今回は、懐かしの 『 Visual Basic 6.0 』でも非常にお世話になった、フォルダ・ファイルなどを管理する『 Scripting.FileSystemObject 』を使用します。

COM をストアドから使用できるように環境を構成してみる

 COM を使用可能にするには、Ole Automation Procedures サーバー構成オプションを設定する必要があります。sp_condigure を使用して有効にします。下記のストアドを SQL Server Management Studio で実行しましょう。

1
2
3
4
5
6
7
8
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

f:id:koogucc11:20141006094015p:plain

 以上で準備完了です。

実際に試してみる

 下記のクエリを SQL Server Management Studio で実行してみましょう。( エラー処理はまったくしてませんので、ご注意を。 )  

 Scripting.FileSystemObject を生成し、フォルダ作成後、ファイルを作成し、Scripting.FileSystemObject のインスタンスを破棄します。

1
2
3
4
5
6
7
8
DECLARE @objFileSystemObject INT
DECLARE @objFolder INT

EXEC sp_OACreate 'Scripting.FileSystemObject', @objFileSystemObject OUT
EXEC sp_OAMethod @objFileSystemObject, 'CreateFolder', NULL, N'C:\Temp\'
EXEC sp_OAMethod @objFileSystemObject, 'CreateTextFile', @objFileSystemObject OUT,
N'C:\Temp\temp.txt'
EXEC sp_OADestroy @objFileSystemObject

f:id:koogucc11:20141013034604p:plain

 指定した場所にファイルを作成することができました。

f:id:koogucc11:20141013033757p:plain

おわりに何か書いてみる

  最近 COM を使う機会が少なくなっています。昔はサーバーサイドでも COM+ で EnterpriseService を使ったサービスなど開発していたものです。そんなことを思い出しながら、この記事を書きました。