GO ในการใช้ SQL Server Management Studio & Transact SQL คืออะไร


363

SQL Server Management Studio จะแทรกคำสั่ง GO เสมอเมื่อฉันสร้างแบบสอบถามโดยใช้เมนู "Script As" คลิกขวา ทำไม? GO ทำอะไรจริง ๆ



29
@ChrisF - ไม่ซ้ำกัน แต่คำตอบที่ยอมรับยังตอบคำถามนี้ได้ คำถามนั้นเกี่ยวกับการใช้ "GO" ในธุรกรรม - เพียงปรากฎว่าไม่ใช่คำสั่ง SQL เลย คำถามนี้เป็นคำถามทั่วไปและพยายามให้คำตอบที่ชัดเจนสำหรับคำถามเกี่ยวกับคำสั่ง GO ใน SSMS
tvanfosson

3
ลองดูที่ลิงค์นี้: ชุดคำสั่งที่เหมาะกับอะไร?
Zain Rizvi

เอกสารประกอบของ Microsoft: คำชี้แจงอรรถประโยชน์ของ SQL Server - GO : รุ่นก่อนหน้า GO จะดำเนินการตามจำนวนครั้งที่ระบุ
นาที

คำตอบ:


304

มันเป็นตัวยุติแบทช์ แต่คุณสามารถเปลี่ยนเป็นอะไรก็ได้ที่คุณต้องการ ข้อความแสดงแทน


80
gbn ทำให้เลือกและดูว่าเกิดอะไรขึ้น :-)
SQLMenace

14
ขอบคุณ! อย่างไรก็ตามประเด็นของคำสั่ง GO คืออะไร? อาจฟังดูงี่เง่า แต่ 'รหัสชุด' หมายถึงอะไร msdnพูดว่าหลังจาก GO อายุการใช้งานของตัวแปรหมดอายุ ฟังดูไม่เกี่ยวกับความมุ่งมั่นในการทำธุรกรรมใช่ไหม? มีสถานการณ์ใดบ้างที่ฉันควรจะเก็บคำสั่ง GO ไว้ในสคริปต์ของฉัน?
kate1138

4
หมายความว่า T-SQL ทั้งหมดก่อนที่จะดำเนินการ "พร้อมกัน" จากสิ่งที่ฉันเข้าใจมันสามารถใช้แทนอัฒภาค (OLEDB / Oracle) ได้ ตัวอย่างเช่นหากคุณมีสคริปต์การปรับใช้โพสต์ขนาดใหญ่คำสั่ง GO ระหว่างบรรทัดอาจช่วยให้หน่วยความจำที่ใช้ในสคริปต์
แอนโธนีเมสัน

4
คำตอบนี้ไม่ได้อธิบาย "สิ่งที่มันทำจริง" หรือเหตุผล
Andrew

หลังจากอ่านคำตอบของ @tvanfosson: มันเปลี่ยนได้ด้วยเซมิโคลอนจริงๆหรือเปล่า?
WoIIe

299

ตั้งแต่ Management Studio 2005 ดูเหมือนว่าคุณสามารถใช้GOกับintพารามิเตอร์เช่น:

INSERT INTO mytable DEFAULT VALUES
GO 10

mytableดังกล่าวข้างต้นจะแทรกเข้าไปใน 10 แถว โดยทั่วไปGOจะดำเนินการตามคำสั่ง SQL ที่เกี่ยวข้องnครั้ง


199

คำสั่ง GO ไม่ใช่คำสั่ง Transact-SQL แต่เป็นคำสั่งพิเศษที่รู้จักโดยยูทิลิตี้ MS หลายตัวรวมถึงตัวแก้ไขโค้ด SQL Server Management Studio

คำสั่ง GO ใช้เพื่อจัดกลุ่มคำสั่ง SQL เป็นแบตช์ซึ่งส่งไปยังเซิร์ฟเวอร์ด้วยกัน คำสั่งที่รวมอยู่ในแบตช์นั่นคือชุดของคำสั่งตั้งแต่คำสั่ง GO ล่าสุดหรือการเริ่มต้นเซสชันต้องสอดคล้องกันอย่างมีเหตุผล ตัวอย่างเช่นคุณไม่สามารถกำหนดตัวแปรในชุดหนึ่งแล้วใช้อีกชุดหนึ่งได้เนื่องจากขอบเขตของตัวแปรนั้น จำกัด อยู่ที่ชุดที่กำหนดไว้

สำหรับข้อมูลเพิ่มเติมโปรดดูที่http://msdn.microsoft.com/en-us/library/ms188037.aspx


37
การแบทช์สิ่งต่างGOๆ ที่มีประโยชน์จริงในสถานการณ์ใด
nicodemus13


4
ดังนั้นถ้า 1 ชุดคำสั่งในชุดล้มเหลวทำทั้งหมดล้มเหลว?
MonsterMMORPG

36

GO ไม่ใช่คำหลัก SQL

เป็นตัวคั่นแบทช์ที่ใช้โดยเครื่องมือไคลเอ็นต์ (เช่น SSMS) เพื่อแยกสคริปต์ทั้งหมดออกเป็นแบทช์

ตอบก่อนหลายครั้ง ... ตัวอย่างที่ 1


4
ในการป้องกันของฉันฉันได้ตรวจสอบคำแนะนำที่ซ้ำกันก่อนที่ฉันจะส่งคำถาม - และตัวอย่างของคุณไม่ปรากฏขึ้นหรือไม่ซ้ำกันจริง ๆ แม้ว่าคำตอบจะใช้งานได้
tvanfosson

26
มันยากที่จะค้นหาคำว่า "GO" ที่นี่ :-)
gbn

20

เพียงเพื่อเพิ่มคำตอบที่มีอยู่เมื่อคุณกำลังสร้างมุมมองที่คุณต้องแยกคำสั่งเหล่านี้ออกเป็นชุดชุดโดยใช้มิฉะนั้นคุณจะได้รับข้อผิดพลาดgo 'CREATE VIEW' must be the only statement in the batchตัวอย่างเช่นคุณจะไม่สามารถรันสคริปต์ sql ต่อไปนี้ได้หากไม่มีgo

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

สร้างขั้นตอนด้วย
Luciano Santos

2
นี่เป็นคำตอบเดียวที่ตอบคำถามส่วนแรกของ OP "จริง ๆ ... แทรกคำสั่ง GO เสมอ ... ทำไม" ดูเหมือนว่าส่วนใหญ่ออกจากความกลัว เวลาที่จำเป็นเท่านั้นคือเมื่อคำสั่งต้องอยู่ในชุดของมันเอง
bielawski

7

Go หมายความว่าคำสั่ง SQL ใด ๆ ที่ถูกเขียนไว้ก่อนหน้านี้และหลังจาก GO ก่อนหน้านี้จะไปที่เซิร์ฟเวอร์ SQL เพื่อประมวลผล

Select * from employees;
GO    -- GO 1

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

ในตัวอย่างข้างต้นคำสั่งก่อน GO 1 จะไปที่ sql Sever ในแบทช์และคำสั่งอื่น ๆ ก่อนที่ GO 2 จะไปที่เซิร์ฟเวอร์ sql ในแบทช์อื่น ดังนั้นเราจึงเห็นว่ามันมีแบตช์ที่แยกจากกัน


5
Use herDatabase
GO ; 

รหัสบอกว่าจะดำเนินการคำแนะนำด้านบนGOเครื่องหมาย ฐานข้อมูลเริ่มต้นของฉันคือ myDatabase ดังนั้นแทนที่จะใช้myDatabase GOและสร้างแบบสอบถามปัจจุบันเพื่อใช้ฐานข้อมูลของเธอ


-8

นี่คือความมหัศจรรย์ของ GO

SELECT 'Go'
Go 10

SYNTAX: ไป INT(BatchNumber)

BatchNumber:ไม่มีครั้งเกิดขึ้น

ดูเรียบง่ายมันอาจนำคุณไปสู่สปาเก็ตตี้ถ้ารหัสลึก


นี่คือความพยายามที่จะอธิบายคำสั่ง GOTO ที่ใช้ในการเขียนโปรแกรม (ฉันคิดว่า) เช่นชุดสคริปต์ .. ไม่มีอะไรเกี่ยวข้องกับคำสั่ง GO ใน SQL Server GO มักจะไม่ได้ใช้กับ INT แม้ว่าคุณจะสามารถทำได้หากคุณต้องการประมวลผลแบตช์ N จำนวนครั้ง .. ดังนั้นไม่ใช่นั่นไม่ใช่ "วิเศษ" ของ GO มันถูกใช้เพื่อแยกสคริปต์ออกเป็นชุดของการประมวลผลที่จัดกลุ่มตามที่อธิบายไว้ในคำตอบอื่น ๆ
Heriberto Lugo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.