www.junmt.info

I love the guiter.


2024年5月 5日(日) 15:14 JST

SQLServerが出力するメモリ不足の謎

データベース関連

SQLServer2008R2のsqlcmdで以下のようなコマンドを実行する。

sqlcmd -c ; -S localhost -U user -P pass -i hoge.sql

この時、hoge.sqlの中に「;」で区切られて、かつ「GO」が含まれていない
INSERT分やUPDATE分が大量にある場合、以下のようなメッセージが出力されます。

メッセージ 701、レベル 17、状態 139、サーバー localhost、行 15843
このクエリを実行するには、リソース プール 'internal' のシステム メモリが不足しています。

-cオプションはバッチターミネーターを指定しているので、「GO」が含まれるかどうかは
別問題のはずですが、ダメみたいです。

-c cmd_end バッチ ターミネータを指定します。既定では、"GO" だけが入力されている行があると、コマンドが終了したと見なされ、SQL Server に送られます。バッチ ターミネータをリセットする場合、Transact-SQL の予約キーワードやオペレーティング システムで特別な意味を持つ文字は、先頭に円記号が付いているかどうかに関係なく、使用しないでください。

※参考
http://technet.microsoft.com/ja-jp/library/ms162773.aspx

■追記:2010/09/29

-cで指定したバッチターミネーターを単独行にしたところ、期待通りの動作をしました。

×ダメな例(-c ;)

UPDATE EMPLOYEE SET NAME='太郎' WHERE CODE=1;
UPDATE EMPLOYEE SET NAME='太郎' WHERE CODE=2;

○良い例(-c ;)

UPDATE EMPLOYEE SET NAME='太郎' WHERE CODE=1
;
UPDATE EMPLOYEE SET NAME='太郎' WHERE CODE=2
;

トラックバック

このエントリのトラックバックURL: http://www.junmt.info/trackback.php/20100926164914963

この記事にはトラックバック・コメントがありません。
SQLServerが出力するメモリ不足の謎 | 0 コメント | アカウントの登録
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。