[SQL Server] SQLからOSコマンドを実行する方法 | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

SQL Serverでプロシージャなどを作っていると、たまにOSコマンドを実行できたらなぁ...と思うことがあります。


そんな時に使うのがxp_cmdshellという拡張プロシージャです。



xp_cmdshellの使い方は非常に簡単です。

xp_cmdshell 'コマンド文字列'


ただし、この拡張プロシージャはmasterデータベースにしか存在しないため、実際に使用する時はデータベース名で修飾する必要があります。


さらにプロシージャ内で使用する場合は頭にEXECも必要です。


では、実際によく使う例として、ファイルに情報を書き出すコマンドを書いてみましょう。

EXEC master..xp_cmdshell 'echo file output test > test.txt'


あ、ちなみにカレントディレクトリはcmd.exeのあるディレクトリ(C:\Windows\System32など)みたいです。


違うディレクトリに書き出したければ、パス名で記述すればOKです。

それから、こんな書き方をすると、戻り値も取れます。(戻り値といっても成功:0、失敗:1の2値ですが...)

EXEC @result = master..xp_cmdshell 'dir *.exe'


と、こんな感じで簡単にコマンドを実行できるのですが、セキュリティ面には注意が必要です。


少なくともユーザーが任意のコマンドを実行できてしまうような実装にしてしまうことは避けるべきでしょう。