SQL Server Management Studio总是插入一个GO命令时,我创建一个查询使用右键单击“脚本作为”菜单。为什么?GO到底是做什么的?
当前回答
GO不是SQL关键字。
它是客户端工具(如SSMS)使用的批处理分隔符,用于将整个脚本分解为批处理
之前回答过几次…示例1
其他回答
GO命令不是Transact-SQL语句,而是几个MS实用程序(包括SQL Server Management Studio代码编辑器)可以识别的特殊命令。
GO命令用于将SQL命令分组,并一起发送到服务器。批处理中包含的命令,即自上一个GO命令或会话开始以来的命令集,必须在逻辑上一致。例如,您不能在一个批处理中定义一个变量,然后在另一个批处理中使用它,因为变量的范围仅限于定义它的批处理。
欲了解更多信息,请参见http://msdn.microsoft.com/en-us/library/ms188037.aspx。
GO不是SQL关键字。
它是客户端工具(如SSMS)使用的批处理分隔符,用于将整个脚本分解为批处理
之前回答过几次…示例1
GO意思是让SQL重复这个你在它后面加上的数字。就像用英语说;“嘿,去那里3次。”尝试下面的SQL和结果将呈现表3次。
SELECT * FROM Table
GO 3
它是一个批处理终止符,但是你可以将它更改为任何你想要的
当我想在进入其他查询之前提交一组查询时,我使用GO关键字。
我可以补充的一点是,当你在GO命令之前声明了一些变量时,你将无法在GO命令之后访问这些变量。即
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
更新
我知道,人们询问什么时候使用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'
执行上述查询将单独提交修改,而不会导致生成大量的回滚日志。另外,如果第三个查询失败,您知道前两个查询是正确执行的,并且不会回滚任何东西。因此,您不需要花费更多的时间为以前执行的查询再次更新/删除记录。
用一句话来总结,“我使用GO命令作为电子游戏中的检查点。”如果你在检查点(GO命令)后失败,你不需要重新开始,而是让你的游戏从最后一个检查点开始。
推荐文章
- 在SQL server查询中将NULL替换为0
- 在SQL中修改表的模式名
- 如何得到累计和
- 如何在SQL Server 2005的一条语句中更新两个表?
- 如何创建临时表与SELECT * INTO tempTable从CTE查询
- 在SQL Server的选择语句中使用带TOP的变量,而不是动态的
- SQL变量保存整数列表
- 在SQL中转换月号到月名函数
- 改变一个varchar列的最大长度?
- 如何在SQL中从DateTime格式获取时间?
- 暂时关闭约束(MS SQL)
- WHERE子句中的IF子句
- 如何在SSMS中从ntext或nvarchar(max)查看所有文本?
- 创建表如果在SQL Server中不存在
- MSSQL错误“底层提供者在打开时失败”