SQL Server Management Studio ve Transact SQL'de GO kullanımı nedir?


363

SQL Server Management Studio, sağ "Komut Dosyası" menüsünü kullanarak bir sorgu oluşturduğumda her zaman bir GO komutu ekler. Neden? GO aslında ne yapıyor?



29
@ChrisF - bu bir kopya değil, ancak kabul edilen cevap da bu soruya cevap veriyor. Bu soru bir işlemde "GO" kullanmakla ilgilidir - sadece bir SQL komutu olmadığı ortaya çıkıyor. Bu soru çok daha geneldir ve SSMS'deki GO komutu hakkında sorulara kesin bir cevap vermeye çalışır.
tvanfosson

3
Ayrıca şu bağlantıya bir göz atın: Toplu ifadeler ne işe yarar?
Zain Rizvi

Microsoft belgeleri: SQL Server Utilities Bildirimleri - GO : GO'dan önceki toplu iş belirtilen sayıda yürütür.
mins

Yanıtlar:


304

Bu bir toplu iş sonlandırıcıdır, ancak istediğiniz gibi değiştirebilirsiniz alternatif metin


80
gbn SELECT olun ve ne olduğuna bakın :-)
SQLMenace

14
Teşekkürler! Ancak o zaman GO ifadesinin anlamı nedir? Bu aptalca gelebilir ama 'kod grubu' ne anlama geliyor? msdn GO'dan sonra değişkenlerin ömrünün sona erdiğini söylüyor. İşlem taahhüdü ile ilgisi yok mu? GO deyimini scriptlerimde tutmam gereken durumlar var mı?
kate1138

4
Bundan önce tüm T-SQL'in "aynı anda" çalıştırılacağı anlamına gelir. Anladığım kadarıyla, noktalı virgül (OLEDB / Oracle) ile değiştirilebilir. Örneğin, büyük bir dağıtım sonrası komut dosyanız varsa, satırlar arasındaki bir GO ifadesi komut dosyasında kullanılan belleğe yardımcı olabilir.
Anthony Mason

4
Bu cevap gerçekten "aslında ne yaptığını" ya da nedenini açıklamıyor
Andrew

@Tvanfosson'un cevabını okuduktan sonra: Noktalı virgül ile gerçekten değiştirilebilir mi?
WoIIe

299

Management Studio 2005'ten beri aşağıdaki gibi GObir intparametre ile kullanabileceğiniz anlaşılıyor :

INSERT INTO mytable DEFAULT VALUES
GO 10

Yukarıdaki 10 satır ekleyecektir mytable. Genel olarak, GOilgili sql komutları nsürelerini yürütür .


199

GO komutu bir Transact-SQL deyimi değil, SQL Server Management Studio kod düzenleyicisi de dahil olmak üzere birçok MS yardımcı programı tarafından tanınan özel bir komuttur.

GO komutu, SQL komutlarını sunucuya birlikte gönderilen gruplar halinde gruplandırmak için kullanılır. Toplu işe dahil edilen komutlar, yani son GO komutundan veya oturumun başlamasından bu yana verilen komutlar dizisi mantıksal olarak tutarlı olmalıdır. Örneğin, değişkenin kapsamı tanımlandığı toplu işle sınırlı olduğundan, bir toplu işte bir değişkeni tanımlayamaz ve başka bir değişkende kullanamazsınız.

Daha fazla bilgi için, bkz. Http://msdn.microsoft.com/en-us/library/ms188037.aspx .


37
Hangi durumda şeyleri GOgerçekten yararlı kılar ?
nicodemus13


4
toplu işte 1 deyimi başarısız olursa, hepsi başarısız olur?
MonsterMMORPG

36

GO bir SQL anahtar sözcüğü değildir.

Komut dosyasının tamamını toplu olarak bölmek için istemci araçları (SSMS gibi) tarafından kullanılan bir toplu ayırıcıdır

Daha önce birkaç kez cevap verdim ... örnek 1


4
Savunmamda, soruyu göndermeden önce önerilen kopyaları inceledim - ve örneğiniz görünmedi, ancak cevap uygulanabilir olsa da, gerçekten bir kopya değil.
tvanfosson

26
Burada "GO" aramak zordur :-)
gbn

20

Sadece mevcut cevaplara eklemek için, görünümler oluştururken bu komutları kullanarak toplu olarak ayırmanız gerekir go, aksi takdirde hatayı alırsınız 'CREATE VIEW' must be the only statement in the batch. Yani, örneğin, aşağıdaki sql betiğinigo

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

Ayrıca prosedürler oluşturun
Luciano Santos

2
Bu OP'nin "... her zaman bir GO komutu ekler .... Neden?" Sorusunun ilk kısmını gerçekten ele alan tek cevaptır. Görünüşe göre, çoğu zaman, korkudan. Gereken tek zaman, bir komutun kendi kümesinde olması gerektiğidir.
bielawski

7

Go, SQL ifadelerinden önce ve daha önceki herhangi bir GO'dan sonra yazılan her ne olursa olsun, işlem için SQL sunucusuna gidileceği anlamına gelir.

Select * from employees;
GO    -- GO 1

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

Yukarıdaki örnekte, GO 1'den önceki ifadeler bir toplu iş içinde sql sever'e ve ardından GO 2'den önceki diğer tüm ifadeler başka bir toplu işteki sql sunucusuna gidecektir. Gördüğümüz gibi ayrı gruplar var.


5
Use herDatabase
GO ; 

Kod, GOişaretleyicinin üstündeki talimatları yürütmeyi söylüyor . Varsayılan veritabanım myDatabase'dir, dolayısıyla herDatabase'i kullanmak myDatabase GOve kullanmak için geçerli sorguyu yapmak yerine


-8

İşte GO'nun büyüsü.

SELECT 'Go'
Go 10

SYNTAX: GİRİŞ(BatchNumber)

BatchNumber: Kez oluşmadı

Basit görünüyor, eğer daha derine kod yazarsanız sizi Spagetti'ye götürebilir .


Bu toplu komut dosyaları gibi programlama (sanırım) kullanılan GOTO deyimi açıklamaya çalışıyor .. SQL Server GO deyimi ile ilgisi yoktur. GO genellikle bir INT ile kullanılmaz, ancak toplu N miktarını işlemek isterseniz yapabilirsiniz .. yani hayır, GO'nun "büyüsü" değildir. Bir komut dosyasını diğer yanıtlarda açıklandığı gibi bir grup gruplanmış yürütmeye ayırmak için kullanılır.
Heriberto Lugo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.