2010-02-22 71 views
10

Sự khác biệt giữa ;GO trong quy trình được lưu trữ trong SQL Server là gì?Sự khác biệt giữa; và GO trong thủ tục lưu trữ trong SQL Server?

Thực ra, nếu tôi có một thủ tục được lưu trữ trong máy chủ SQL và muốn đặt các truy vấn riêng biệt bên trong nó, cái đầu tiên chỉ tính số lượng bản ghi (đếm) và số thứ hai chọn một số bản ghi dựa trên một số điều kiện nên sử dụng giữa hai truy vấn đó?

Go hoặc ;

Trả lời

18

; chỉ cần kết thúc tuyên bố.

GO không phải là câu lệnh mà là lệnh cho máy chủ để cam kết lô hiện tại vào Cơ sở dữ liệu. Nó tạo ra một điểm dừng bên trong giao dịch.

http://msdn.microsoft.com/en-us/library/ms188037.aspx

(Update, nhờ cho ý kiến): GO là một tuyên bố dành cho studio Management như xa như tôi biết, có thể vào các công cụ khác cũng

+3

Thực ra, hãy chuyển sang dự phòng bên ngoài "studio quản lý". Tôi sẽ không (-1) mặc dù. –

+0

@Hassan Syed: Đúng, bạn đang sửa – Faruz

+0

Hãy thử thực hiện một câu lệnh với 'GO' trong nó thông qua một SqlCommand, nó sẽ ném một ngoại lệ. – cjk

11

Các dấu chấm phẩy ngăn cách truy vấn, Lệnh GO phân tách các lô. (Ngoài ra GO không phải là một lệnh T-SQL, nó là một lệnh được công nhận bởi các tiện ích sqlcmd và osql và Management Studio.)

Bạn không thể sử dụng GO bên trong một thủ tục lưu sẵn. Nếu bạn thử, định nghĩa của thủ tục sẽ kết thúc ở đó, và phần còn lại sẽ là một lô riêng biệt.

Một biến cục bộ có phạm vi của hàng loạt, vì vậy sau khi một lệnh GO bạn không thể sử dụng các biến địa phương khai báo trước khi lệnh GO:

declare @test int 

set @test = 42 

GO 

select @Test -- causes an error message as @Test is undefined 
4

GO không phải là một lệnh đến máy chủ, đó là bộ tách hàng loạt mặc định cho hầu hết các công cụ máy khách cung cấp MS. Khi công cụ máy khách gặp "GO" trên một dòng mới của chính nó, nó sẽ gửi bất kỳ lệnh nào nó đã tích lũy cho đến nay đến máy chủ, và sau đó bắt đầu lại một lần nữa.

Điều này có nghĩa là bất kỳ biến nào được khai báo trong một đợt không có sẵn trong các đợt tiếp theo. Và điều đó cũng có nghĩa là không thể đặt nhận xét nhiều dòng xung quanh lệnh "GO" - bởi vì máy chủ sẽ thấy lô đầu tiên và xem nhận xét chưa được hoàn thành.

2

Nó đánh dấu sự kết thúc của một lô trong Trình phân tích truy vấn và do đó báo hiệu kết thúc của một định nghĩa quy trình được lưu trữ trong lô đó. Nhiều như tôi biết nó không phải là một phần của sp. GO không phải là lệnh TSQL.

Và; chỉ cần kết thúc tuyên bố.

Các vấn đề liên quan