SQL Server Management Studio总是插入一个GO命令时,我创建一个查询使用右键单击“脚本作为”菜单。为什么?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'得到输出。
Go的意思是,无论SQL语句写在它之前和任何更早的Go之后,都将去SQL服务器进行处理。
Select * from employees;
GO -- GO 1
update employees set empID=21 where empCode=123;
GO -- GO 2
在上面的例子中,在GO 1之前的语句将在一个批处理中进入sql server,然后在GO 2之前的任何其他语句将在另一个批处理中进入sql server。我们可以看到它是分开的批次。
从Management Studio 2005开始,你似乎可以使用带有int参数的GO,比如:
INSERT INTO mytable DEFAULT VALUES
GO 10
上面将在我的表中插入10行。一般来说,GO会执行n次相关的sql命令。
它是一个批处理终止符,但是你可以将它更改为任何你想要的
只是为了添加到现有的答案,当你创建视图时,你必须使用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
推荐文章
- 确定记录是否存在的最快方法
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 如何从SQL Server Management Studio的历史记录中删除“服务器名称”项
- 外键约束可能导致循环或多条级联路径?
- 如何选择每一行的列值不是独特的
- nvarchar(max)非文本
- 在SQL Server 2008 R2中重命名数据库时出错
- 将数据复制到另一个表中
- 如何在SQL中选择表的最后一条记录?
- 修改列,添加默认约束
- 在存储过程中使用“SET XACT_ABORT ON”有什么好处?
- 如何检查SQL Server文本列是否为空?