“和”的区别是什么&引用;及;围棋;在T-SQL中?

“和”的区别是什么&引用;及;围棋;在T-SQL中?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我使用ADO.NET和sqlcmd实用程序将SQL脚本发送到SQL Server 2008。使用有什么区别和转到来分隔SQL块?分号是语句分隔符。遇到分号时,不一定执行前面的语句 GO 表示批次的结束。执行前一批语句,就像遇到块的结尾一样 GO 2 表示多次执行批处理。我想我这辈子可能已经用过两次了。再说一次,我不是一个DBA的贸易。我想;字符分隔SQL命令列表,GO只是指示SQL Server提交前面的所有命令。'GO'通常用于指示一批SQL语句的结束,这意味着您可以将一个开始事务和结束事

我使用ADO.NET和sqlcmd实用程序将SQL脚本发送到SQL Server 2008。使用
有什么区别
转到
来分隔SQL块?

分号是语句分隔符。遇到分号时,不一定执行前面的语句

GO
表示批次的结束。执行前一批语句,就像遇到块的结尾一样

GO 2

表示多次执行批处理。我想我这辈子可能已经用过两次了。再说一次,我不是一个DBA的贸易。

我想;字符分隔SQL命令列表,GO只是指示SQL Server提交前面的所有命令。

'GO'通常用于指示一批SQL语句的结束,这意味着您可以将一个
开始事务
结束事务
打包到一个可能同时失败或成功的语句集合中

“;”通常用于将多个SQL语句彼此分离。这在需要返回多个记录集的SQL脚本中很明显,例如“从表1中选择*”;从表2中选择*这将在客户端产生两个独立的记录集。

“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
实际上不是一个T-SQL命令。
GO
命令是由Microsoft工具引入的,用于分离批处理语句,例如存储过程的结尾
GO
受Microsoft SQL堆栈工具支持,但不是其他工具的正式组成部分

不能将
GO
放入SQL字符串中,并将其作为ADO.NET命令对象的一部分发送,因为SQL本身不理解该术语。演示这一点的另一种方法是使用探查器:在QueryAnalyzer/ManagementStudio中设置一些使用
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块:

  • 去[数]

    其中,[count]是一个正整数,表示在所述GO之前的TSQL命令块要反复执行多少次

  • 此外,与分号不同,GO在新DDL之前是必需的,例如,在创建新视图时,因为分隔先前命令的分号将触发错误。例如:
  • 下拉视图#临时视图
    转到
    创建视图#另一个_视图。。。
    -->没有错误

    如果在上一个示例中用分号替换GO,则会引发以下错误消息:


    “CREATE VIEW”必须是查询批处理中的第一条语句。

    我启动了一个connect,试图使GO成为一个有效的t-sql命令:那么,我们如何知道sql脚本中的哪些语句是sql语句并且需要分号,而sql脚本中的哪些语句不是sql语句,因此不需要分号呢?@EdElliott的新位置建议:传奇!前几天我一直在寻找,最完整的答案。尤其是(3)这一点,如果被忽视,将极有可能导致脚本失败。