SQL Server - サイズの大きなスクリプトファイルを実行する方法
サイズの大きなスクリプトファイル
サイズが数ギガあるような SQL スクリプトの入ったファイルは、SQL Server Management Studio で sql ファイルを開こうとしてもエラーになる可能性が高いです。
また、サイズの大きなスクリプトファイルを開けても、マシンのスペックにもよりますが、実行するとメモリー不足のエラーになって実行できないこともあります。
今回は、サイズの大きなスクリプトファイルを実行する方法をご紹介します。
sqlcmd ユーティリティ とは?
sqlcmd ユーティリティはコマンドプロンプトから SQL ステートメントやストアードプロシージャなどを実行できるコマンドラインツールです。
この、sqlcmd ユーティリティを使うと、SQL Server Management Studio やテキストエディタでは開けないような大きなサイズのスクリプトファイルも実行することができます。
URL は変更されるかもしれないので、site:docs.microsoft.com "sqlcmd ユーティリティ" で検索してみてください。
sqlcmd ユーティリティ を使ってファイルを実行する
Windows のスタートメニューからコマンドプロンプトを開き、sqlcmd コマンドを実行します。
sqlcmd -S [サーバー] -U [ログイン名] -P [パスワード] -i [入力ファイル] -u -o [出力ファイル]
今回指定するオプションは次のものです。
- -S: サーバー(/デフォルトインスタンスではない場合はインスタンス名)
- -U: ログイン名
- -P: パスワード
- -i: 入力ファイル名
- -u: 出力ファイル Unicode で生成する
- -o: 出力ファイル名
-S の指定がない時は、ローカルにインストールされたデフォルトインスタスに接続されます。
今回は実行結果をファイルに出力しますが、もし実行結果をコマンドラインで見たい時は、-u と -o オプションを削除すれば、コマンドラインに表示されます。
-u を指定しないと出力ファイル内の日本語が文字化けしてしまいますのでご注意ください。
また、スクリプト内に USE ステートメントがなく、データベースも指定してスクリプトを実行したい時は -d [データベース名] で指定してください。
例えば、sqlcmd ユーティリティを使って、D:\Temp\Sql\scripts.sql という名前のスクリプトが入ったファイルを、ローカル(.)にインストールされている MSSQLSERVER2017 という名前付きインスタンスに対して実行し、実行結果を D:\Temp\Sql\result.txt に保存するコマンドは以下の通りです。
sqlcmd -S .\MSSQLSERVER2017 -U user2 -P Password -i D:\Temp\Sql\scripts.sql -u -o D:\Temp\Sql\result.txt
コマンドを実行すると、SQL Server に対してスクリプトが実行され、このように result.txt ファイルが出力されました。
最後に、sqlcmd ユーティリティをコマンドラインから実行すると ODBC を使用してスクリプトを実行します。
SQL Server Management Studio は SqlClient を使用してスクリプトを実行しますので、デフォルトのオプションの違いなどで、同じクエリーを実行しても少し違った動きをする可能性もなくはないので、お知らせしておきます。