";"之间有什么区别 和T-SQL中的"GO"?

Nes*_*tor 50 sql t-sql sql-server sql-server-2008

我使用ADO.NET以及sqlcmd实用程序将SQL脚本发送到SQL Server 2008.使用;GO分离SQL块有什么区别?

kei*_*en7 60

GO实际上并不是一个T-SQL命令.该GO命令由Microsoft工具引入,作为分离批处理语句(如存储过程结束)的一种方法.GOMicrosoft SQL堆栈工具支持,但不是其他工具的正式部分.

您不能将一个GOSQL字符串放入并将其作为ADO.NET命令对象的一部分发送,因为SQL本身不理解该术语.另一种证明这一点的方法是使用分析器:设置一些GO在查询分析器/ Management Studio 中使用的语句,然后在执行时运行分析器.您将看到它们作为单独的命令发布到服务器.

分号用于表示语句本身的结尾,不一定是整批.

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


Phi*_*uss 37

"GO"类似于; 在许多情况下,但实际上确实意味着批次的结束.

调用"GO"语句时会提交每个批处理,因此如果您有:

SELECT * FROM table-that-does-not-exist;
SELECT * FROM good-table;
Run Code Online (Sandbox Code Playgroud)

在您的批处理中,然后将永远不会调用好表选择,因为第一个选择将导致错误.

如果你改为:

SELECT * FROM table-that-does-not-exist
GO
SELECT * FROM good-table
GO
Run Code Online (Sandbox Code Playgroud)

第一个select语句仍然会导致错误,但由于第二个语句是自己的批处理,它仍然会执行.

GO与提交交易无关.


Bob*_*man 21

分号是一个语句分隔符.遇到分号时,不一定执行上一个语句.

GO
Run Code Online (Sandbox Code Playgroud)

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

GO 2
Run Code Online (Sandbox Code Playgroud)

意味着多次执行批处理.我想我可能在生活中使用过两次这个选项.再说一遍,我不是交易DBA.


use*_*866 10

  1. 在SQL Server TSQL(2005 - 2016)下,请记住:

    • 分号(;)是终止符.
    • GO是批量终止符.
  2. 此外,GO可用于使用以下语法多次调用相同的DML块:

去[计数]

其中[count]是一个正整数,表示一遍又一遍地执行所述GO之前的TSQL命令块的次数.

  1. 此外,与分号不同,GO 在新DDL之前是必需的,例如,当您创建新视图时,因为分隔先前命令的分号将触发错误.例如:

drop view #temporary_view
GO
create view #another_view ...
- > NO ERRORS

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

'CREATE VIEW'必须是查询批处理中的第一个语句.