Việc sử dụng GO trong SQL Server Management Studio & Transact SQL là gì?


363

SQL Server Management Studio luôn chèn lệnh GO khi tôi tạo truy vấn bằng cách nhấp chuột phải vào menu "Script As". Tại sao? GO thực sự làm gì?



29
@ChrisF - đó không phải là một bản sao, mặc dù câu trả lời được chấp nhận cũng trả lời câu hỏi này. Câu hỏi đó là về việc sử dụng "GO" trong một giao dịch - hóa ra nó hoàn toàn không phải là một lệnh SQL. Câu hỏi này tổng quát hơn nhiều và cố gắng đưa ra câu trả lời dứt khoát cho các câu hỏi về lệnh GO trong SSMS.
tvanfosson

3
Ngoài ra hãy xem liên kết này: Báo cáo
Zain Rizvi

Tài liệu Microsoft: Báo cáo tiện ích máy chủ SQL - GO : Lô trước GO sẽ thực hiện số lần được chỉ định.
phút

Câu trả lời:


304

Nó là một terminator, tuy nhiên bạn có thể thay đổi nó thành bất cứ điều gì bạn muốn văn bản thay thế


80
gbn làm cho nó CHỌN và xem xét những gì xảy ra :-)
SQLMenace

14
Cảm ơn! Tuy nhiên, điểm của tuyên bố GO là gì? Điều này nghe có vẻ ngu ngốc nhưng 'lô mã' nghĩa là gì? msdn nói sau khi GO hết tuổi thọ của các biến. Âm thanh không có gì để làm với cam kết giao dịch phải không? Có trường hợp nào tôi nên giữ câu lệnh GO trong tập lệnh của mình không?
kate1138

4
Điều đó có nghĩa là tất cả T-SQL trước nó sẽ thực thi "cùng một lúc". Theo những gì tôi hiểu, nó có thể hoán đổi cho nhau bằng dấu chấm phẩy (OLEDB / Oracle). Chẳng hạn, nếu bạn có một tập lệnh triển khai bài lớn, một câu lệnh GO giữa các dòng có thể giúp bộ nhớ được sử dụng trong tập lệnh.
Anthony Mason

4
Câu trả lời này không thực sự giải thích "những gì nó thực sự làm" hoặc tại sao
Andrew

Sau khi đọc câu trả lời của @tvanfosson: Nó có thực sự hoán đổi với dấu chấm phẩy không?
WoIIe

299

Kể từ Management Studio 2005, có vẻ như bạn có thể sử dụng GOvới một inttham số, như:

INSERT INTO mytable DEFAULT VALUES
GO 10

Ở trên sẽ chèn 10 hàng vào mytable. Nói chung, GOsẽ thực hiện các nlần lệnh sql liên quan .


199

Lệnh GO không phải là câu lệnh Transact-SQL, mà là một lệnh đặc biệt được nhận biết bởi một số tiện ích MS bao gồm trình soạn thảo mã SQL Server Management Studio.

Lệnh GO được sử dụng để nhóm các lệnh SQL thành các lô được gửi đến máy chủ cùng nhau. Các lệnh được bao gồm trong lô, nghĩa là tập hợp các lệnh kể từ lệnh GO cuối cùng hoặc bắt đầu phiên, phải nhất quán về mặt logic. Ví dụ: bạn không thể xác định một biến trong một lô và sau đó sử dụng một biến khác vì phạm vi của biến được giới hạn trong lô mà nó được xác định.

Để biết thêm thông tin, hãy xem http://msdn.microsoft.com/en-us/l Library / ms188037.aspx .


37
Trong tình huống nào là hàng loạt những thứ GOthực sự hữu ích?
nicodemus13


4
Vì vậy, nếu 1 tuyên bố trong lô thất bại, làm tất cả thất bại?
MonsterMMORPG

36

GO không phải là một từ khóa SQL.

Đó là một trình phân tách lô được sử dụng bởi các công cụ máy khách (như SSMS) để chia toàn bộ tập lệnh thành các lô

Đã trả lời trước vài lần ... ví dụ 1


4
Để bảo vệ tôi đã xem qua các bản sao được đề xuất trước khi tôi gửi câu hỏi - và ví dụ của bạn không xuất hiện, cũng không thực sự là một bản sao, mặc dù câu trả lời là có thể áp dụng.
tvanfosson

26
Thật khó để tìm kiếm "GO" tại đây :-)
gbn

20

Chỉ cần thêm vào các câu trả lời hiện có, khi bạn đang tạo chế độ xem, bạn phải tách các lệnh này thành các lô bằng cách sử dụng go, nếu không bạn sẽ gặp lỗi 'CREATE VIEW' must be the only statement in the batch. Vì vậy, ví dụ, bạn sẽ không thể thực thi tập lệnh sql sau mà không cầngo

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

Đồng thời tạo thủ tục
Luciano Santos

2
Đây là câu trả lời duy nhất thực sự giải quyết phần đầu tiên của câu hỏi của OP "... luôn chèn lệnh GO .... Tại sao?". Dường như, hầu hết thời gian, vì sợ hãi. Lần duy nhất cần thiết là khi một lệnh phải nằm trong lô riêng của nó.
bielawski

7

Go có nghĩa là, bất kỳ câu lệnh SQL nào được viết trước nó và sau bất kỳ GO nào trước đó, sẽ đến máy chủ SQL để xử lý.

Select * from employees;
GO    -- GO 1

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

Trong ví dụ trên, các câu lệnh trước GO 1 sẽ chuyển đến sql sever trong một đợt và sau đó bất kỳ câu lệnh nào khác trước GO 2 sẽ chuyển đến máy chủ sql trong một đợt khác. Vì vậy, như chúng ta thấy nó đã tách các lô.


5
Use herDatabase
GO ; 

Mã nói để thực hiện các hướng dẫn trên GOđiểm đánh dấu. Cơ sở dữ liệu mặc định của tôi là myDatabase, vì vậy thay vì sử dụng myDatabase GOvà thực hiện truy vấn hiện tại để sử dụng herDatabase


-8

Đây là sự kỳ diệu của GO.

SELECT 'Go'
Go 10

Đồng bộ: Đi INT(BatchNumber)

Số lô: Không có lần nào xảy ra

Trông đơn giản, Nó có thể dẫn bạn đến Spaghetti nếu bạn viết mã sâu hơn.


điều này đang cố gắng giải thích câu lệnh GOTO như được sử dụng trong lập trình (tôi nghĩ), giống như các tập lệnh bó .. không liên quan gì đến câu lệnh GO trong SQL Server. GO thường không được sử dụng với INT, mặc dù bạn có thể nếu bạn muốn xử lý một lượng N số lần .. vì vậy, đó không phải là "phép thuật" của GO. Nó được sử dụng để phân tách một tập lệnh thành một chuỗi các thực thi được nhóm lại, như được giải thích trong các câu trả lời khác.
Heriberto Lugo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.