SQL Server:批处理语句(即使用“go”)有什么好处?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (77)

我的问题是:有一个分批分离器有什么意义?它给你什么好处,你为什么要使用它?

示例:我经常看到SQL代码中使用它,如下所示,我不明白为什么它会被认为是最佳实践。

USE AdventureWorks2012;
GO
BEGIN TRANSACTION;
GO
IF @@TRANCOUNT = 0
BEGIN
    SELECT FirstName, MiddleName 
    FROM Person.Person WHERE LastName = 'Adams';
    ROLLBACK TRANSACTION;
    PRINT N'Rolling back the transaction two times would cause an error.';
END;
ROLLBACK TRANSACTION;
PRINT N'Rolled back the transaction.';
GO
提问于
用户回答回答于

很多语句必须是批处理中的唯一语句。

CREATE PROCEDURE...

而且,通常在进行模式更改(例如,向现有表中添加新列)之后,使用新模式的语句必须在不同的批处理中单独编译。

通常情况下,提交独立批次的另一种方法是GO是在子批处理中执行sql.EXEC

用户回答回答于

使用批处理分隔符可以帮助您避免以下错误:

if exists (select * from sys.procedures where name = 'sp_test')
    drop procedure sp_test
GO
create procedure sp_test as
begin
    select 1
end

可以做的另一件有趣的事情是使用它多次运行查询:

INSERT INTO MyTable (...) ...
GO 10 -- run all the above 10 times!

扫码关注云+社区