tsql - 什么是 "batch",为什么使用 GO?

标签 tsql

我已经阅读了MSDN等。好的,所以它标志着一个批处理的结束。

什么定义了批处理?当我粘贴一堆要同时运行的脚本时,我不明白为什么需要 go。

我从来没理解过GO。谁能更好地解释这一点以及我何时需要使用它(在多少次或什么类型的交易之后)?

例如,为什么每次更新后我都需要 GO:

 UPDATE [Country]
   SET [CountryCode] = 'IL'
 WHERE code = 'IL'

 GO

 UPDATE [Country]
   SET [CountryCode] = 'PT'
 WHERE code = 'PT'

最佳答案

GO不是正确的 TSQL 命令。

相反,它是连接到 SQL 服务器(Sybase 或 Microsoft 的 - 不确定 Oracle 做什么)的特定客户端程序的命令,向客户端程序发出信号,表明该组命令是输入直到“go”需要发送到服务器执行。

为什么/什么时候需要它?

  • MS SQL Server 中的 GO 有一个“count”参数 - 因此您可以将其用作“重复 N 次”快捷方式。

  • 极大的更新可能会填满 SQL 服务器的日志。为了避免这种情况,可能需要通过 go 将它们分成较小的批处理。

    在您的示例中,如果一组国家/地区代码的更新量很大,以至于会耗尽日志空间,则解决方案是将每个国家/地区代码分离到一个单独的事务中 - 这可以通过在客户端使用go

  • 某些 SQL 语句必须用 GO 与以下语句分隔才能工作。

    例如,您不能在单个事务中删除表并重新创建同名表,至少在 Sybase 中是这样(创建过程/触发器也是如此):

> drop table tempdb.guest.x1          
> create table tempdb.guest.x1 (a int)
> go
  Msg 2714, Level 16, State 1
  Server 'SYBDEV', Line 2
  There is already an object named 'x1' in the database.   
  
> drop table tempdb.guest.x1          
> go
> create table tempdb.guest.x1 (a int)
> go
>

关于tsql - 什么是 "batch",为什么使用 GO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668529/

相关文章:

sql - 有没有好的方法在 SQL 中做到这一点?

sql - 如何在 CTE 之后使用 if 语句 (SQL Server 2005)

sql - 选择查询根据优先级选择

sql - 具有包含列的索引,有什么区别?

sql - 如何使用 sum(y) 和不同的表优化 select x 除以子查询的 SQL?

sql - 使用表列值之一创建额外的总和列

tsql - SQL 乘法差异

sql-server - 多表复杂实体的乐观并发

sql - 如何快速比较多个字符串?

sql - 连续的日期