Tôi sử dụng ADO.NET cũng như tiện ích sqlcmd để gửi các kịch bản lệnh SQL đến SQL Server 2008. Sự khác nhau giữa việc sử dụng ;
và GO
để phân tách các khối SQL là gì?Sự khác biệt giữa ";" và "GO" trong T-SQL?
Trả lời
GO
không thực sự là lệnh T-SQL. Lệnh GO
đã được giới thiệu bởi các công cụ của Microsoft như một cách để tách các câu lệnh lô như kết thúc của một thủ tục được lưu trữ. GO
được hỗ trợ bởi các công cụ ngăn xếp Microsoft SQL nhưng không chính thức là một phần của các công cụ khác.
Bạn không thể đặt GO
vào một chuỗi SQL và gửi nó như là một phần của đối tượng lệnh ADO.NET vì chính SQL không hiểu thuật ngữ đó. Một cách khác để chứng minh điều này là với profiler: thiết lập một số câu lệnh sử dụng GO
trong Query Analyzer/Management Studio và sau đó chạy profiler khi bạn thực hiện. Bạn sẽ thấy chúng được phát hành dưới dạng các lệnh riêng biệt cho máy chủ.
Dấu chấm phẩy được sử dụng để biểu thị sự kết thúc của một tuyên bố, không nhất thiết là toàn bộ lô.
dấu chấm phẩy là dấu tách câu lệnh. (Các) câu lệnh trước không nhất thiết phải được thực thi khi gặp phải dấu chấm phẩy.
GO
Ký kết thúc của một đợt. Thực hiện lô lệnh trước đó, cũng như không gặp phải phần cuối của khối.
GO 2
Có nghĩa là thực hiện lô nhiều lần. Tôi nghĩ rằng tôi đã sử dụng tùy chọn đó có thể hai lần trong cuộc sống của tôi. Sau đó, một lần nữa, tôi không phải là một DBA bởi thương mại.
Tôi nghĩ; ký tự phân tách danh sách các lệnh SQL, GO chỉ hướng dẫn SQL Server cam kết tất cả các lệnh trước đó.
'GO' thường được dùng để báo hiệu kết thúc một batch các câu lệnh SQL có nghĩa là bạn có thể có một begin transaction
và end transaction
gói lên thành một bộ sưu tập duy nhất của báo cáo mà có thể thất bại hay thành công với nhau.
';' thường được sử dụng để phân tách nhiều câu lệnh SQL với nhau. Điều này là đáng chú ý trong các kịch bản SQL cần phải trả về nhiều bản ghi, chẳng hạn như `select * từ table1; chọn * từ bảng2; ' điều này sẽ dẫn đến hai tập bản ghi riêng biệt ở phía khách hàng.
"GO" tương tự; trong nhiều trường hợp, nhưng thực tế có nghĩa là kết thúc một đợt.
Mỗi đợt cam kết khi "GO" tuyên bố được gọi, vì vậy nếu bạn có:
SELECT * FROM table-that-does-not-exist;
SELECT * FROM good-table;
trong bó, thì tốt-bảng chọn sẽ không bao giờ được gọi vì chọn đầu tiên sẽ gây ra một lỗi.
Nếu bạn thay vì có:
SELECT * FROM table-that-does-not-exist
GO
SELECT * FROM good-table
GO
Các lựa chọn công bố đầu tiên vẫn gây ra một lỗi, nhưng kể từ khi tuyên bố thứ hai là trong hàng loạt của riêng mình, nó vẫn sẽ thực thi.
GO không liên quan gì đến việc thực hiện giao dịch.
Lệnh GO có nghĩa là kết thúc một đợt. Do đó tất cả các biến được khai báo trước GO đều không hợp lệ sau lệnh GO. Chống lại dấu chấm phẩy không kết thúc lô.
Nếu bạn sẽ sử dụng lệnh DML trong quy trình, hãy sử dụng dấu chấm phẩy thay vì GO. Ví dụ:
CREATE PROCEDURE SpMyProc
@myProcParam VARCHAR(20)
AS
DECLARE @myOtherParam INT = 5
;DISABLE TRIGGER ALL ON tMyTable
UPDATE tMyTable SET myVar = @myProcParam, mySecondVar = @myOtherParam
;ENABLE TRIGGER OLL ON tMyTable
Dưới SQL Server TSQL (2005 - 2016) nhớ rằng:
- Dấu chấm phẩy (;) là một khối terminator.
- GO là lô người kết thúc.
Bên cạnh đó, GO có thể được sử dụng để gọi cùng một khối DML nhiều lần bằng cách sử dụng cú pháp sau:
GO [đếm]
đâu [đếm] là một số nguyên dương mà cho biết khối TSQL của các lệnh trước GO nói bao nhiêu lần được thực hiện lặp đi lặp lại.
- Ngoài ra, không giống như dấu chấm phẩy, GO là bắt buộc trước một DDL mới, chẳng hạn, khi bạn tạo một cái nhìn mới, vì một dấu chấm phẩy tách lệnh trước đó sẽ kích hoạt lỗi. Ví dụ:
thả xem #temporary_view
GO
tạo view #another_view ...
-> NO LỖI
Nếu bạn thay thế GO bằng dấu chấm phẩy trong ví dụ trước, nó sẽ nâng cao thông báo lỗi sau:
'TẠO XEM' phải là câu lệnh đầu tiên trong chuỗi truy vấn.
- 1. Sự khác biệt giữa; và GO trong thủ tục lưu trữ trong SQL Server?
- 2. Sự khác biệt giữa. và #
- 3. Sự khác biệt giữa $ (...) và `...`
- 4. Sự khác biệt giữa = và: =
- 5. Sự khác biệt giữa $ * và $ @
- 6. Sự khác biệt giữa ". +" Và ". +?"
- 7. Sự khác biệt giữa "**/* /" và "** /"?
- 8. Sự khác biệt giữa '.' và "." trong java
- 9. Sự khác biệt giữa. và: trong Lua
- 10. sự khác biệt giữa 'và "trong JavaScript?
- 11. Sự khác biệt giữa! và !! trong yaml?
- 12. Sự khác biệt giữa $ @ và $! trong perl
- 13. Sự khác biệt giữa SwingWorker và SwingUtilities.invokeLater
- 14. Sự khác biệt giữa fgets và fscanf?
- 15. Sự khác biệt giữa self.navigationController.navigationItem và self.navigationItem
- 16. sự khác biệt giữa $ .getJSON và $ .get
- 17. Sự khác biệt giữa WebApiConfig.cs và RouteConfig.cs
- 18. Sự khác biệt giữa __construct() và init()
- 19. Sự khác biệt giữa RASPHONE.exe và RASDIAL.exe
- 20. Sự khác biệt giữa viewbag và viewstate?
- 21. sự khác biệt giữa query.list và query.iterate
- 22. Sự khác biệt giữa Window.load và document.readyState
- 23. Sự khác biệt giữa URL và URI?
- 24. Sự khác biệt giữa Z3 và coq
- 25. Sự khác biệt giữa textMultiLine và textLongMessage
- 26. Sự khác biệt giữa modelAttribute và commandName
- 27. Sự khác biệt giữa idl và odl
- 28. Sự khác biệt giữa MKCoordinateSpan và CLLocationCoordinate2D
- 29. Sự khác biệt giữa Monitor.Pulse và Monitor.PulseAll
- 30. Sự khác biệt giữa inproc và outproc
Tôi đã bắt đầu kết nối để tìm cách trở thành lệnh t-sql hợp lệ: https://connect.microsoft.com/SQLServer/feedback/details/3138257/make-go-a-first-class- ngôn ngữ-từ khóa –