SQL Server Management Studio总是插入一个GO命令时,我创建一个查询使用右键单击“脚本作为”菜单。为什么?GO到底是做什么的?


当前回答

它是一个分离查询的命令。如果你在做多次选择,它没有太大的区别,以我为例,主要用途是当我创建脚本时,你需要创建存储过程,然后授予访问或执行它们。例如:

CREATE OR ALTER PROCEDURE dbo.select1
AS
BEGIN
    SET NOCOUNT ON
        
    SELECT 1
END

EXEC dbo.select1

它将创建包含所有内容的存储过程,包括EXEC,它将在循环中结束。 GO语句会说,在结束后创建存储过程,然后执行。

CREATE OR ALTER PROCEDURE dbo.select1
AS
BEGIN
    SET NOCOUNT ON
        
    SELECT 1
END
GO
EXEC dbo.select1

其他回答

Use herDatabase
GO ; 

代码表示执行GO标记上面的指令。 我的默认数据库是myDatabase,所以不是使用myDatabase GO,并使当前查询使用她的数据库

我还没有看到的一个用法是错误恢复。 由于一次只运行两个go之间的命令,这意味着一个命令中的编译错误可以与其他命令分开。通常情况下,批处理中的任何编译错误都会导致整个程序无法执行。

exec do.Something
GO
sel from table
print 'here'
GO
print 'there'

在上面的例子中,'here'将不会被打印出来,因为'sel'语句中存在错误。

现在,在中间添加一个GO:

exec do.Something
GO
sel from table
GO
print 'here'
GO
print 'there'

像以前一样,'sel'得到一个错误,但'here'得到输出。

它是一个批处理终止符,但是你可以将它更改为任何你想要的

它是一个分离查询的命令。如果你在做多次选择,它没有太大的区别,以我为例,主要用途是当我创建脚本时,你需要创建存储过程,然后授予访问或执行它们。例如:

CREATE OR ALTER PROCEDURE dbo.select1
AS
BEGIN
    SET NOCOUNT ON
        
    SELECT 1
END

EXEC dbo.select1

它将创建包含所有内容的存储过程,包括EXEC,它将在循环中结束。 GO语句会说,在结束后创建存储过程,然后执行。

CREATE OR ALTER PROCEDURE dbo.select1
AS
BEGIN
    SET NOCOUNT ON
        
    SELECT 1
END
GO
EXEC dbo.select1

只是为了添加到现有的答案,当你创建视图时,你必须使用go将这些命令分成批量,否则你会得到错误'CREATE VIEW'必须是批处理中唯一的语句。例如,如果没有go,您将无法执行下面的sql脚本

create view MyView1 as
select Id,Name from table1
go
create view MyView2 as
select Id,Name from table1
go

select * from MyView1
select * from MyView2