Date: Mon, 15 Jan 2007 11:23:26 +0900
From: "Akira Horikawa" <who@example.ne.jp>
堀川です
@@ERROR命令は、最後に実行したTransact-SQL命令の実行結果を
表しますが、この最後とは、@@ERRORの値を取得する直前の命令と
考えて下さい。
@@ERRORが、バッチ処理の一番最初に実行されているので、その
直前の命令は、存在しません。
バッチとは、データベースサーバー側で実行される、Transact-SQL
プログラムの塊のことです。
このプログラムの塊単位で、データベースサーバー側でコンパイルされ、
実行されます。
Transact-SQLの中で宣言された(DECLARE命令)変数は、バッチの中で
有効ですが、これは、コンパイルとその実行単位が異なる他のバッチとは
独立しているという意味です。
逆に言えば、バッチ間で変数の値を受け渡すことはできません。
Goとは、OSQLコマンドなどに対して、バッチの区切りを表す命令です。
Goが入力されたら、それまで入力されたプログラムをバッチ処理単位として
データベースサーバーに送信して、その実行を依頼します。
バッチとか、Goとか、なかなか理解しにくい概念ですが、SQLServerの
Transact-SQLの基本概念となっています。
INSERT INTO 命令
(省略)
go
IF @@ERROR = 0
(省略)
go
上記のように、バッチを区切るのではなく、
INSERT INTO 命令
IF @@ERROR = 0
(省略)
go
のように、同一バッチにします。
どこでバッチを区切るかどうかは、プログラムの読みやすさ、サーバーに対する
コンパイル負荷や実行最適化等などを考えて区切りますが、一般的には、
バッチ先頭にどうしても記述しなければいけない特別な命令(CREATE PROCなど)
を実行しない限りは、同一バッチにします。
------------------------------------
Epata-IT/日本技術ソフト開発
堀川 明 (Akira Horikawa)
01月15日(月曜日) 11時21分記
mailto:who@example.ne.jp
http://www.horikawa.ne.jp/msde/
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|