GO命令在SQL脚本中的作用是什么?

时间:2013-07-01 19:12:21

标签: sql-server sql-server-2008

我已经阅读了关于GO命令但我没有看到以下问题的明确答案。

假设我从SSMS运行以下命令集:

INSERT INTO [dbo].[hwr] ([wr_id]) VALUES (990017882)
INSERT INTO [dbo].[hwr] ([wr_id]) VALUES (990017883)
INSERT INTO [dbo].[hwr] ([wr_id]) VALUES (990017884)
INSERT INTO [dbo].[hwr] ([wr_id]) VALUES (990017885)

这与以下内容有何不同:

INSERT INTO [dbo].[hwr] ([wr_id]) VALUES (990017882)
GO
INSERT INTO [dbo].[hwr] ([wr_id]) VALUES (990017883)
GO
INSERT INTO [dbo].[hwr] ([wr_id]) VALUES (990017884)
GO
INSERT INTO [dbo].[hwr] ([wr_id]) VALUES (990017885)
GO

换句话说,'GO'命令在这种情况下实际完成了什么吗?如果是这样,是什么?

非常感谢, 马特

2 个答案:

答案 0 :(得分:3)

GO命令实际上不是SQL命令,而是SSMS命令。它告诉SSMS将以前的命令作为批处理发送。

所以区别在于你的第一个代码会立即发送所有内容,而第二个代码将分四批发送。

答案 1 :(得分:3)

GO是批处理分隔符

某些操作要求它是批处理中的第一行(例如,CREATE PROCEDURE)。如果您使用GO,则可以将所有命令放在1个文件中

如果它在自己的批次

中,你也可以声明相同的变量

例如

declare @i int = 5
select @i
go
declare @i int = 5
select @i
go

取出去,它会爆炸

你也可以在GO之后添加一个数字,它会多次执行批处理,例如

declare @i int = 5
select @i
go 4