在T-SQL脚本中使用或不使用"GO"会影响结果吗?

Cha*_*adD 3 t-sql sql-server-2005 sql-server-2008

我们有一个SSIS包,它在具有2005兼容性设置的SQL 2008盒子上进行生产.该程序包包含一个SQL任务,看起来好像脚本末尾的SQL没有运行.

在离开公司之前,处理该程序包的人注意到程序包需要在各个SQL命令之间"转到"才能解决问题.但是,在具有2008兼容性的SQL Server 2008上进行开发测试时,该软件包运行良好.

据我所知GO,为了效率,批量放置命令,批量发送命令到数据库提供程序.我认为GO应该影响结果的唯一方法是,如果该脚本上面的某个位置出现错误.GO在那种情况下,我可以想象,只有那种情况,影响结果.但是,我们没有看到记录任何错误的证据.

有人可以向我建议是否GO可能与问题有关吗?假设没有遇到错误,我对"GO"命令的理解表明它使用或缺乏使用很可能与问题无关.

Ada*_*son 6

GO关键字,如你所说,所使用的SQL Server管理工具一批分离.但需要注意的是,关键字本身是由客户端而不是服务器解析的.

根据所讨论的SQL Server版本,有些事情需要放入不同的批处理中,例如创建和使用数据库.还有一些操作必须在批处理开始时进行(如use语句),因此使用这些关键字意味着您必须将脚本分成几批.

关于将脚本分成多个批次需要记住的几件事:

  • 如果批处理中遇到错误,则停止执行该批处理.但是,如果您的脚本有多个批次,则一个批处理中的错误将仅停止执行批处理; 后续批次仍将执行
  • 批次中声明的变量仅适用于该批次; 它们不能用于其他批次

如果脚本只执行CRUD操作,那么除非需要任何上述行为差异,否则无需将其分解为多个批次.