我使用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. Go和=之间有什么区别?
- 2. Go中的new(Struct)和&Struct {}之间的区别是什么?
- 3. Go的[0]和[:1]之间的区别是什么?
- 4. MSSQL和TSQL之间的区别是什么
- 5. $(())和expr之间的区别是什么?
- 6. $和$ .fn之间的区别是什么?
- 7. ++和:haskell之间的区别是什么?
- 8. $(“”)和$ .find(“”)之间的区别是什么?
- 9. “\”和“\。”之间的区别是什么?
- 10. “$ | ++”和“$ | = 1”之间的区别是什么
- 11. $(...)和`...`之间的区别是什么
- 12. .equals()和==之间的区别是什么?
- 13. [undefined]和[,]之间的区别是什么?
- 14. Go和Ruby之间的主要区别
- 15. 什么之间的区别〜^和Git中
- 16. XCode中的“Build and Go(Run)”和“Build and Run”之间的区别是什么?
- 17. “。”和“。”之间的区别是什么?和[System.ENVIRONMENT] :: PowerShell中的CurrentDirectory?
- 18. 数据库 - TSQL(Sql Server 2008)中3和N'3'之间的区别是什么
- 19. MVC和MVVM之间的区别和相似之处是什么?
- 20. 区别:%% a和%variable%变量之间的区别是什么?
- 21. 什么是为PrintWriter和DataOutputStream之间的区别是什么?
- 22. C#和MVC中System.Environment.Username和User.Identity.Name之间的区别是什么?
- 23. Go的tmp和html有什么区别?
- 24. 什么@android之间的区别:和android:
- 25. TSQL中“<>”和“不是”之间的区别?
- 26. 什么是UIGestureRecognizer的使用和UITouch和UIGestureRecoginzer之间的区别
- 27. Ext JS中的grid.columns和grid.getColumnManager()。getColumns()之间的区别是什么?
- 28. Selenium中的定位符和Webelement之间的区别是什么?
- 29. log4net dll中的XmlCofigurator和DomCofigurator之间的区别是什么?
- 30. MassTransit中的Consumes.For,Consumes.Selected,Consumes.All和Consumes.Context之间的区别是什么?
我开始连接试图让GO成为一个有效的t-sql命令:https://connect.microsoft.com/SQLServer/feedback/details/3138257/make-go-a-first-class-语言的关键字 – 2017-07-26 08:02:08