T-SQLでGOの意味
goはSYBASEとSQL Serverで物事の終わりを表し、結果を提出して確認します.ORACLEに相当するCommit SQL Serverユーティリティは、GOを現在のTransact-SQLバッチ文をSQL Serverに送信すべき信号と解釈します.現在のバッチ文は、前のGOコマンドから入力されたすべての文であり、最初のGOコマンドの場合は、特殊なセッションまたはスクリプトの先頭からこのGOコマンドまでのすべての文です.
ローカル(ユーザ定義)変数の役割ドメインは、GOコマンドの後で参照できないバッチに制限されます.
GOはバッチの終了を表す.
各GO間の文をSQLと見なすことができます.
GOは標準的な構文ではなく、クエリーアナライザが複数のバッチを区別するために設けた区切り記号にすぎない.
具体的には
解析と実行の時このT-SQLスクリプトは実は2つの独立した部分だと思われて、ただ彼らは同じSessionを使うだけです
最も説得力のある例を挙げる
使用する変数の前にGOを挿入すると、このGOの前にスクリプトがコミットされ、このGOの後の部分が2番目の部分としてコミットされます.
P.S.ここでいうコミットはSQLコードをコミットするだけで、「GO」というキーワードはコミットされません
また、以下の特別な注意事項に注意する必要があります.
1はGOと同じ行で、GOの前にSQLを含めることはできません.
2はGOと同じ行で、GOの後に--注釈をつけることができますが、/**/注釈をつけることはできません!
この問題はみんなそう書かないので、遭遇する確率は低いですが、1つ目の問題を引き起こす原因がある場合は注意してください.×SQLスクリプトのテキストフォーマットは、コードが完了したらテキストフォーマットをチェックしてUTFを選択したほうがいいです.そうしないと、自分が改行しているのを見ているかもしれませんが、SQL解析のときは同じ行にいると思っています.このような状況では、チェックすればするほどSQLが正しいと思いますが、しかし......しかし、文法の間違いを教えてくれました.気をつけて...昨日私は馬鹿にそこで一日調整しました......すっかり憂鬱になってしまいました・・・ほほほ
次はGOの特性をもう一つ言いますが、私たちはみんなよく使いません.あるいは、GOがあまりにもよくあるので、この重要な特性を無視しました.つまり、GOは私たちの代わりに繰り返し操作することができます.
ローカル(ユーザ定義)変数の役割ドメインは、GOコマンドの後で参照できないバッチに制限されます.
GOはバッチの終了を表す.
各GO間の文をSQLと見なすことができます.
GOは標準的な構文ではなく、クエリーアナライザが複数のバッチを区別するために設けた区切り記号にすぎない.
具体的には
- CREATE TABLE TableName
- (
- ColumnName1 DataType,
- ColumnName2 DataType
- )
- GO
-
- INSERT INTO TableName(ColumnName1,ColumnName2)
- VALUES (Value1,Value2)
- GO
解析と実行の時このT-SQLスクリプトは実は2つの独立した部分だと思われて、ただ彼らは同じSessionを使うだけです
最も説得力のある例を挙げる
- DECLARE @Parameter1 INT
- DECLARE @Parameter2 INT
-
- -- If insert "GO" to there...
- -- "GO"
- -- Result:
- -- Msg 137, Level 15, State 1, Line 1
- -- Must declare the scalar variable "@Parameter1".
- -- Msg 137, Level 15, State 1, Line 2
- -- Must declare the scalar variable "@Parameter2".
- -- Msg 137, Level 15, State 2, Line 4
- -- Must declare the scalar variable "@Parameter1".
- SET @Parameter1 = 1
- SET @Parameter2 = 2
-
- PRINT @Parameter1 + @Parameter2
- GO
- -- Result: 3
使用する変数の前にGOを挿入すると、このGOの前にスクリプトがコミットされ、このGOの後の部分が2番目の部分としてコミットされます.
P.S.ここでいうコミットはSQLコードをコミットするだけで、「GO」というキーワードはコミットされません
また、以下の特別な注意事項に注意する必要があります.
1はGOと同じ行で、GOの前にSQLを含めることはできません.
2はGOと同じ行で、GOの後に--注釈をつけることができますが、/**/注釈をつけることはできません!
この問題はみんなそう書かないので、遭遇する確率は低いですが、1つ目の問題を引き起こす原因がある場合は注意してください.×SQLスクリプトのテキストフォーマットは、コードが完了したらテキストフォーマットをチェックしてUTFを選択したほうがいいです.そうしないと、自分が改行しているのを見ているかもしれませんが、SQL解析のときは同じ行にいると思っています.このような状況では、チェックすればするほどSQLが正しいと思いますが、しかし......しかし、文法の間違いを教えてくれました.気をつけて...昨日私は馬鹿にそこで一日調整しました......すっかり憂鬱になってしまいました・・・ほほほ
次はGOの特性をもう一つ言いますが、私たちはみんなよく使いません.あるいは、GOがあまりにもよくあるので、この重要な特性を無視しました.つまり、GOは私たちの代わりに繰り返し操作することができます.
- -- INSERT TABLE TableName(Column1, Column2)
- -- VALUES (Value1, Value2)
- -- GO [Number] Number !
-
- INSERT TABLE TableName(Column1, Column2)
- VALUES (Value1, Value2)
- GO 100
- -- GO 100 ,
- -- SSMS
- -- , 100% , 100