SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

新しいコマンドラインツールの mssql-cli のクエリ実行方法のメモ

leave a comment

先日、新しいクロスプラットフォーム対応のコマンドラインツールである、mssql-cli というツールがリリースされました。

Try mssql-cli, a new interactive command line tool for SQL Server
今まで、コマンドラインで SQL Server に接続するためには、sqlcmd を使う機会が多かったと思います。
sqlcmd もクロスプラットフォーム対応されているのですが、このツール自体は、SQL Server 2005 から実装されたもので (それ以前は、osql / isql として実装)、バージョンによって改善はされているのですが、大きな変更はないツールだったのではないでしょうか。
mssql-cli は、モダンなコマンドラインツールとして開発が行われているもので、次の画像のように、コマンドラインでインテリセンスを使いながら入力をするということが可能です。 
クエリの実行履歴についても「~/.config/mssqlcli」配下の履歴ファイルに保存されていますので、クエリを後から確認もできます。
image
このツールは Python で実装されているのですが、どのようにして、SQL Server に対してクエリが実行されているのかが気になったのでちょっと調べてみました。
SQL Server に接続するアプリケーション開発のファーストステップのドキュメントとしては、Build an app using SQL Server がありますが、Python SQL ドライバー を使うのではなく、別のアプローチで接続しているんですね。

「mssql-cli」は、GitHub 上で公開されているパブリックなリポジトリで開発されているので、ソースコードは確認することができます。
最初、「pyodbc」「pymssql」が使用されているのかと思ったのですが、ソースを確認してもこれらのパッケージはインポートされていませんでした。
さて、どうやって実行しているのだろうと思ったら、リポジトリに含まれている「sqltoolsservice」を外部実行ファイルを経由することで、SQL Server に対してクエリを実行しているんですね。
sqltoolsservice」自体も、GitHub でソースが公開されているものとなり、Visual Studio Code の SQL Server 拡張や、SQL Operations Studio でも使用されているコンポーネントとなるようですね。
sqltoolsservice を使用しているものについては「MicrosoftSqlToolsServiceLayer」や「MicrosoftSqlToolsCredentials」が起動され、SQL Server との実際のやり取り (認証 / クエリ実行) については、これらのコンポーネントに対して、JSON-RPC をコールすることで実行されているようです。
sqltoolsservice を使用することで、アプリケーションの変化に柔軟に対応して、SQL Server への接続を提供することができる感じでしょうか。
image
sqltoolsservice については、.NET Core が採用されているようで、クロスプラットフォームに対応した .NET のデータアクセスコンポーネントを使って、実装が行われているんですね。
.NET Core (C#) を使用して Azure SQL データベースに照会する や、.NET Core に対応した SMO についての情報についてもキャッチアップしないとなと思った今日この頃です。

Share

Written by Masayuki.Ozawa

12月 24th, 2017 at 12:14 pm

Posted in SQL Server

Tagged with ,

Leave a Reply