tva*_*son 337 t-sql sql-server ssms
使用右键单击"脚本为"菜单创建查询时,SQL Server Management Studio始终插入GO命令.为什么?GO实际上做了什么?
SQL*_*ace 289
它是批量终止符,但您可以将其更改为您想要的任何内容

Mic*_*Sim 283
由于管理Studio 2005中似乎就可以使用GO同一个int参数,如:
INSERT INTO mytable DEFAULT VALUES
GO 10
Run Code Online (Sandbox Code Playgroud)
以上将插入10行mytable.一般来说,GO会执行相关的sql命令n次数.
tva*_*son 188
GO命令不是Transact-SQL语句,而是由几个MS实用程序(包括SQL Server Management Studio代码编辑器)识别的特殊命令.
GO命令用于将SQL命令分组为批次,这些批次一起发送到服务器.批处理中包含的命令,即自上一个GO命令或会话开始以来的命令集,必须在逻辑上一致.例如,您无法在一个批次中定义变量,然后在另一个批次中使用它,因为变量的范围仅限于定义它的批次.
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms188037.aspx.
Myk*_*ych 16
只是要添加到现有答案中,在创建视图时必须将这些命令分成批处理go,否则您将收到错误'CREATE VIEW' must be the only statement in the batch.因此,例如,如果没有,您将无法执行以下sql脚本go
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
Run Code Online (Sandbox Code Playgroud)
Jam*_*ran 13
当我想要在进行其他查询之前获取GO一组查询时,我会使用关键字。committed
我可以补充的一件事是,当您在命令之前声明了一些变量时,GO您将无法访问GO命令之后的变量。IE
DECLARE @dt DateTime = GETDATE();
UPDATE MyTable SET UpdatedOn = @dt where mycondition = 'myvalue';
GO
-- Below query will raise an error saying the @dt is not declared.
UPDATE MySecondTable SET UpdatedOn = @dt where mycondition = 'myvalue'; -- Must declare the scalar variable "@dt".
GO
Run Code Online (Sandbox Code Playgroud)
更新
我看到,人们要求何时使用该Go命令,所以我想,我应该Go在查询中添加使用该命令的原因。
当我在表中有大量更新时,我通常会在下班时运行这些更新(这意味着我不会监视查询),因为第二天来并找到准备好进行其他操作的表很方便。
当我需要运行长时间操作并想要分离查询并完成部分事务时,我使用Go命令,例如:
-- First Query
Update MyBigTable1 SET somecol1='someval1' where somecol2='someval2'
GO
-- Second Query
Update MyBigTable2 SET somecol1='someval1' where somecol2='someval2'
GO
-- Third Query
Update MyBigTable3 SET somecol1='someval1' where somecol2='someval2'
Run Code Online (Sandbox Code Playgroud)
执行上述查询将单独提交修改,而不会导致大量回滚日志形成。另外,如果第三个查询失败,您知道前两个查询已正确执行,并且不会回滚任何内容。因此,您不需要花费更多时间再次更新/删除先前执行的查询的记录。
用一句话来概括,“我像GO在电子游戏中一样使用命令作为检查点。” 如果您在检查点(GO 命令)之后失败,则无需重新开始,而是从最后一个检查点开始游戏。
Use herDatabase
GO ;
Run Code Online (Sandbox Code Playgroud)
代码表示执行GO标记上方的指令.我的默认数据库是myDatabase,因此不使用myDatabase GO并使当前查询使用herDatabase
小智 6
Go意味着,无论在其之前和之后的任何早期编写的SQL语句如何,都将转到SQL服务器进行处理。
Select * from employees;
GO -- GO 1
update employees set empID=21 where empCode=123;
GO -- GO 2
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,GO 1之前的语句将成批进入sql服务器,然后GO 2之前的任何其他语句将成批进入sql服务器。因此,正如我们所见,它已分批处理。
| 归档时间: |
|
| 查看次数: |
238986 次 |
| 最近记录: |