Apa gunanya GO dalam SQL Server Management Studio & Transact SQL?

363

SQL Server Management Studio selalu menyisipkan perintah GO ketika saya membuat kueri menggunakan menu klik kanan "Script As". Mengapa? Apa yang sebenarnya GO lakukan?

tvanfosson
sumber
29
@ ChrisF - itu bukan duplikat, meskipun jawaban yang diterima juga menjawab pertanyaan ini. Pertanyaan itu adalah tentang menggunakan "GO" dalam transaksi - ternyata itu bukan perintah SQL sama sekali. Pertanyaan ini jauh lebih umum dan berupaya memberikan jawaban pasti untuk pertanyaan tentang perintah GO di SSMS.
tvanfosson
3
Lihat juga tautan ini: Apa gunanya pernyataan batching?
Zain Rizvi
Dokumentasi Microsoft: Pernyataan Utilitas Server SQL - GO : Kumpulan GO sebelumnya akan mengeksekusi jumlah yang ditentukan kali.
mnt

Jawaban:

304

Ini adalah terminator batch, namun Anda dapat mengubahnya ke apa pun yang Anda inginkan teks alternatif

SQLMenace
sumber
80
gbn membuatnya SELECT dan lihat apa yang terjadi :-)
SQLMenace
14
Terima kasih! Namun, apa gunanya pernyataan GO? Ini mungkin terdengar bodoh tapi apa artinya 'kumpulan kode'? msdn mengatakan setelah GO masa hidup variabel kedaluwarsa. Kedengarannya tidak ada hubungannya dengan komitmen transaksi, kan? Apakah ada situasi di mana saya harus menyimpan pernyataan GO dalam skrip saya?
kate1138
4
Ini berarti bahwa semua T-SQL sebelum itu akan mengeksekusi "sekaligus". Dari apa yang saya pahami, dapat dipertukarkan dengan titik koma (OLEDB / Oracle). Misalnya jika Anda memiliki skrip penyebaran posting yang besar, pernyataan GO yang tersirat dapat membantu memori yang digunakan dalam skrip.
Anthony Mason
4
Jawaban ini tidak benar-benar menjelaskan "apa yang sebenarnya dilakukannya" atau mengapa
Andrew
Setelah membaca jawaban @tvanfosson: Apakah ini benar - benar dapat dipertukarkan dengan titik koma?
WoIIe
299

Sejak Management Studio 2005 tampaknya Anda dapat menggunakan GOdengan intparameter, seperti:

INSERT INTO mytable DEFAULT VALUES
GO 10

Di atas akan memasukkan 10 baris ke dalam mytable. Secara umum, GOakan mengeksekusi perintah sql terkait nkali .

MicSim
sumber
199

Perintah GO bukan pernyataan Transact-SQL, tetapi perintah khusus yang dikenali oleh beberapa utilitas MS termasuk editor kode SQL Server Management Studio.

Perintah GO digunakan untuk mengelompokkan perintah SQL ke dalam batch yang dikirim ke server bersama-sama. Perintah yang termasuk dalam kumpulan, yaitu, set perintah sejak perintah GO terakhir atau awal sesi, harus konsisten secara logis. Misalnya, Anda tidak bisa mendefinisikan variabel dalam satu batch dan kemudian menggunakannya dalam yang lain karena ruang lingkup variabel terbatas pada batch yang didefinisikan.

Untuk informasi lebih lanjut, lihat http://msdn.microsoft.com/en-us/library/ms188037.aspx .

tvanfosson
sumber
37
Dalam situasi apa hal-hal yang GObenar - benar berguna?
nicodemus13
3
@ nicodemus13 Lihat stackoverflow.com/questions/20711326/…
Zain Rizvi
4
jadi jika 1 pernyataan dalam batch gagal, apakah semuanya gagal?
MonsterMMORPG
36

GO bukan kata kunci SQL.

Ini adalah pemisah batch yang digunakan oleh alat klien (seperti SSMS) untuk memecah seluruh skrip menjadi batch

Dijawab sebelum beberapa kali ... contoh 1

gbn
sumber
4
Dalam pembelaan saya, saya memang melihat duplikat yang disarankan sebelum saya mengajukan pertanyaan - dan contoh Anda tidak muncul, juga bukan duplikat, meskipun jawabannya berlaku.
tvanfosson
26
Sulit untuk mencari "GO" di sini :-)
gbn
20

Hanya untuk menambah jawaban yang ada, ketika Anda membuat tampilan Anda harus memisahkan perintah-perintah ini menjadi batch menggunakan go, jika tidak, Anda akan mendapatkan kesalahan 'CREATE VIEW' must be the only statement in the batch. Jadi, misalnya, Anda tidak akan dapat menjalankan skrip sql berikut tanpago

create view MyView1 as
select Id,Name from table1
go
create view MyView2 as
select Id,Name from table1
go

select * from MyView1
select * from MyView2
Mykhailo Seniutovych
sumber
Juga buat prosedur
Luciano Santos
2
Ini adalah satu-satunya jawaban yang benar-benar menjawab bagian pertama dari pertanyaan OP "... selalu menyisipkan perintah GO .... Kenapa?". Tampaknya, sebagian besar waktu, karena rasa takut. Satu-satunya waktu yang diperlukan adalah ketika sebuah perintah harus berada di batch itu sendiri.
bielawski
7

Go berarti, pernyataan SQL apa pun yang ditulis sebelum dan setelah GO sebelumnya, akan masuk ke server SQL untuk diproses.

Select * from employees;
GO    -- GO 1

update employees set empID=21 where empCode=123;
GO    -- GO 2

Dalam contoh di atas, pernyataan sebelum GO 1 akan pergi ke sql sever dalam sebuah batch dan kemudian pernyataan lain sebelum GO 2 akan pergi ke sql server di batch lain. Jadi seperti yang kita lihat, batch telah dipisahkan.

ANIL KUMAR
sumber
5
Use herDatabase
GO ; 

Kode mengatakan untuk menjalankan instruksi di atas GOpenanda. Database default saya adalah myDatabase, jadi alih-alih menggunakan myDatabase GOdan membuat kueri saat ini untuk menggunakan herDatabase

TonyP
sumber
-8

Inilah keajaiban GO.

SELECT 'Go'
Go 10

SYNTAX: Go INT(BatchNumber)

BatchNumber: Tidak ada waktu terjadi

Terlihat sederhana, Ini mungkin mengarahkan Anda ke Spaghetti jika Anda kode lebih dalam.

Ragul
sumber
ini mencoba menjelaskan pernyataan GOTO seperti yang digunakan dalam pemrograman (saya pikir), seperti skrip batch .. tidak ada hubungannya dengan pernyataan GO di SQL Server. GO biasanya tidak digunakan dengan INT, meskipun Anda bisa jika Anda ingin memproses batch N jumlah kali .. jadi tidak, itu bukan "keajaiban" dari GO. Ini digunakan untuk memisahkan skrip menjadi serangkaian eksekusi yang dikelompokkan, seperti yang dijelaskan dalam jawaban lainnya.
Heriberto Lugo