2016-05-04 15 views
1

BEGIN ...のTechNetのENDの説明は、次の発言で、私は混乱しますすべてのTransact-SQLステートメントは、BEGIN ... ENDブロック内で有効ですが、特定のTransact-SQLステートメントが一緒に内にグループ化するべきではありませんTransact-SQL文を同じバッチ内でグループ化しないでください。

同じバッチ(ステートメントブロック)。

https://technet.microsoft.com/en-us/library/aa225998(v=sql.80).aspx

彼らはBEGIN ... ENDをブロック内でグループ化すべきではない理由を誰も教えてもらえますか? BEGIN ... ENDを使用してこの提案として地域を作成するときに問題はありますか:sql server #region

+1

リンク先の記事などを読んだことがありますか?https://technet.microsoft.com/en-us/library/aa172435%28v=sql.80%29.aspx? –

+0

私は読んだけど分からない。もっと詳しく説明できますか? –

+0

基本的には、BEGIN/ENDでグルーピングすることで、バッチの仕方を選択できますが、意図した場合(エラー処理、実行ロジックなど)にのみ実行し、リードすることができる「外観」のために意図しない説明された副作用に。 –

答えて

1

あなたはT-SQLスクリプトで複数のバッチを作成する必要がある場合、あなたはGO文で明示的にコマンドのグループを分離する必要があります。 BEGIN ... ENDブロック(バッチ)は、コードに明示的に追加しなくても、暗黙的に作成されます。だからそれを明示的に追加することはあなたのために追加の問題を作成しません。 linked MSDN article:

CREATE DEFAULTに指定され

特定のコマンドは、関数CREATE PROCEDUREを作成ルールをCREATE、 トリガーを作成し、VIEW文を作成し、一括してグループ化することができない他のと組み合わせることができません ステートメントをバッチで実行します。 CREATEステートメントはバッチを開始する必要があります。すべての そのバッチに続く他のステートメントは、最初のCREATEステートメントの定義の部分 と解釈されます。

テーブルを変更することはできません。次に、 の同じバッチで参照される新しいカラム。

EXECUTE文がバッチ内の最初の文の場合、EXECUTE キーワードは不要です。 EXECUTE文がバッチの最初の文でない場合は、EXECUTEキーワードが必要です。

1

BEGIN..ENDが地域を崩壊することができるようにするために視覚的なオプションではありません、あなたが実際にラインのこれらの束を一緒にしているサーバーを言っています。 #regionのように使用すると、回避策になります。

BEGINとEND Willの間に何かがある場合はがバッチとして実行され、バッチのすべてのルールが適用されるからです。

ステートメントの1つにエラーが発生した場合に、他のステートメントを続行しますか?もっとここに

チェック:Batches

+0

完全には言えませんが、GOとコマンドを区切らないと、残りのT-SQLはBEGIN ... ENDブロックに関係なく実行されません。 –

+0

トランザクションは前のステートメントの動作も変更しますが、これはトピック外です。また、ドキュメントに基づいて: "いくつかの実行時エラー、制約違反など、現在のステートメントのみを停止します。バッチ内の残りのすべてのステートメントが実行されます。 – user3185569

0

あなたは以下のような異なるバッチを区別するためにコメントを使用することができます。

BEGIN /** Region1 Starts**/ 
.... 
.... 
.... 
END /** Region1 ends**/ 

BEGIN /** Region2 Starts **/ 
.... 
.... 
.... 
END /** Region2 Ends **/ 
関連する問題