我使用ADO.NET以及sqlcmd实用程序将SQL脚本发送到SQL Server 2008.使用;
和GO
来区分SQL块是什么区别?“;”和“;”之间的区别是什么?和T-SQL中的“GO”?
回答
GO
实际上并不是T-SQL命令。 Microsoft工具引入了GO
命令,作为分离批处理语句(如存储过程结束)的一种方式。 Microsoft SQL堆栈工具支持GO
,但不是其他工具的正式组成部分。
您不能将GO
放入SQL字符串中,并将其作为ADO.NET命令对象的一部分发送,因为SQL本身并不理解该术语。另一种证明这一点的方法是使用探查器:设置一些在查询分析器/管理工作室中使用GO
的语句,然后在执行时运行探查器。您会看到它们作为单独的命令发布到服务器。
分号用于表示语句本身的结束,不一定是整批。
分号是语句分隔符。当遇到分号时,前面的语句不一定执行。
GO
表示批次结束。执行前一批语句,就像遇到块的结尾一样。
GO 2
表示多次执行批次。我想我在我的生活中可能使用过两次这样的选项。然后再次,我不是贸易的DBA。
我以为;字符分隔了一系列SQL命令,GO只是指示SQL Server提交所有先前的命令。
“GO”通常用来表示SQL语句的一批这意味着你可以有一个begin transaction
和end transaction
包裹成可能会失败或共同成功语句的一个集合的结束。
';'通常用于将多个SQL语句彼此分开。这在需要返回多个记录集的SQL脚本中很明显,比如`select * from table1;从table2选择*;''这将在客户端产生两个单独的记录集。
“GO”类似于;在许多情况下,但事实上意味着批次的结束。
每一批致力于当“GO”语句被调用,所以如果你有:
SELECT * FROM table-that-does-not-exist;
SELECT * FROM good-table;
在批处理
,那么好表中选择将永远不会被调用,因为第一个选择将导致错误。
如果不是有:
SELECT * FROM table-that-does-not-exist
GO
SELECT * FROM good-table
GO
第一个SELECT语句仍然导致错误,但由于第二条语句是在自己批次,它仍然会执行。
GO与提交交易无关。
命令GO是指一批的结束。 因此GO之前声明的所有变量在GO命令后都是无效的。 反对分号不会结束批处理。
如果您将在过程中使用DML命令,请使用分号代替GO。 例如:
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
下的SQL Server TSQL(2005至2016年)牢记的是:
- 分号(;)是块终止。
- GO是批次终止符。
另外,GO可以用于使用以下语法相同DML块多次调用:
GO [COUNT]
其中[COUNT]是一个正整数,指示在所述GO之前的命令的TSQL块将多次执行一遍又一遍。
- 此外,与分号,GO是一个新的DDL之前强制性,比方说,当创建新的视图,因为分号分隔以前的命令将触发一个错误。例如:
降视图#temporary_view
GO
创建视图#another_view ...
- > NO错误
如果你在前面的例子用分号取代GO,它会引发以下错误消息:
'CREATE VIEW'必须是查询批处理中的第一条语句。
- 1. MSSQL和TSQL之间的区别是什么
- 2. ++和:haskell之间的区别是什么?
- 3. $(())和expr之间的区别是什么?
- 4. $(...)和`...`之间的区别是什么
- 5. [undefined]和[,]之间的区别是什么?
- 6. XCode中的“Build and Go(Run)”和“Build and Run”之间的区别是什么?
- 7. MVC和MVVM之间的区别和相似之处是什么?
- 8. 区别:%% a和%variable%变量之间的区别是什么?
- 9. TSQL中“<>”和“不是”之间的区别?
- 10. 什么是UIGestureRecognizer的使用和UITouch和UIGestureRecoginzer之间的区别
- 11. 线和三网,魔杖和triand之间的区别是什么?
- 12. a + = b和a = + b之间的区别是什么,a ++和++ a?
- 13. configure.ac和configure.in以及Makefile.am和Makefile.in之间的区别是什么?
- 14. mootools中的.innerHTML和.set('html','')之间的区别是什么?
- 15. R的read.table中''和''之间的区别是什么?
- 16. OOP中的 - >和::之间的区别是什么
- 17. java中的Array和Hashmap之间的主要区别是什么?
- 18. C++中的Pause(),Sleep()和Wait()之间的区别是什么?
- 19. .Net 3.5中的Microsoft.Web.Management和System.DirectoryServices之间的区别是什么?
- 20. Qt:Webkit中的QtScript和Javascript之间的区别是什么
- 21. HTML中的http://和//之间的区别是什么
- 22. 什么是Asynctask和android中的线程之间的区别?
- 23. Jest Mock功能和Sinon间谍之间的区别是什么
- 24. 正常运行时间和uptime_since_flush_status之间的区别是什么
- 25. 函数中* p和(* p)[3]之间的区别是什么?
- 26. 正则表达式中(。*)和(。*?)之间的区别是什么?
- 27. R中“=”和“< - ”之间的区别是什么?
- 28. C#中System.Type和System.RuntimeType之间的区别是什么?
- 29. 在Scala中,乐趣_和乐趣之间的区别是什么
- 30. python3.x中raw_input()和input()之间的区别是什么?
我开始连接试图让GO成为一个有效的t-sql命令:https://connect.microsoft.com/SQLServer/feedback/details/3138257/make-go-a-first-class-语言的关键字 – 2017-07-26 08:02:08