在SQL Server中使用GO关键字

sql*_*ild 6 c# sql t-sql sql-server sql-server-2005

我知道使用GO关键字.它将多个语句作为整个组发送到sql server,而不是逐个发送每个语句.我希望我是对的!

但我想知道程序员在实际应用程序中使用它.就像我们创建一个存储过程,然后它也做同样的事情,它也编译代码并制定执行计划,并将整个组发送到服务器.

那么我们是否需要在数据库对象的编码中指定GO关键字,例如触发器,视图和存储过程?

Sac*_*hag 13

GO是用于发信号通知批次结束的命令.请注意,它不是T-SQL语句.

Batch是一组一个或多个Transact-SQL语句,它们同时从应用程序发送到SQL Server以供执行

GO在SQL Server中非常有用.但是,只有在真正需要时才需要使用它.因此,您需要记住,除了使用GO命令定义批处理外,还要定义该特定T-SQL代码的范围.批处理中定义的局部变量特定于该批处理.

范围示例 -

DECLARE @STRING1 AS VARCHAR(50)
DECLARE @STRING2 AS VARCHAR(50)

SET @STRING1='BATCH 2'
SET @STRING2='BATCH 3'

SELECT @STRING1 AS RESULT
GO

SELECT @STRING2 AS RESULT
GO
Run Code Online (Sandbox Code Playgroud)

运行此命令会给出错误,指出未声明@ STRING2.因为该变量的范围以GO结尾.所以要小心使用GO并巧妙地使用.

来源 - http://aartemiou.blogspot.com/2009/08/using-go-command-in-sql-server.html

  • 另外请注意,如果使用ADODB或OleDB以编程方式运行查询,则使用GO语句将生成错误.它是在查询分析器/ SQL Server Management Studio中使用的特殊关键字.对于SSMS,可以在"选项"中进行配置 - 可在"工具"菜单中找到.查询执行 - > SQL Server->常规下的"批处理分隔符"设置包含关键字GO. (3认同)

Jus*_*tin 7

GO关键字标志着批处理结束到SQL Server Management Studio - 通常SQL Server Management Studio在一个批处理中执行所有语句(一个批处理可以被认为是数据库的往返),但在某些情况下它可能是希望以不同的批次执行语句(例​​如,SET SHOWPLAN_ALL语句必须是批处理中的唯一语句)

例如,在SQL Server Management Studio中执行以下脚本:

USE StackOverflow
GO
SELECT * FROM Comments
Run Code Online (Sandbox Code Playgroud)

大致相当于在C#中执行以下操作:

using (var cmd = new SqlCommand("USE StackOverflow", conn))
{
    cmd.ExecuteReader();
}
using (var cmd = new SqlCommand("SELECT * FROM Comments", conn))
{
    cmd.ExecuteReader();
}    
Run Code Online (Sandbox Code Playgroud)

请注意,GO不是 T-SQL关键字,只有SQL Server Management Studio和其他SQL工具才能理解.例如,以下方法不起作用,将导致运行时异常:

string cmdText = @"
USE StackOverflow
GO
SELECT * FROM Comments";

using (var cmd = new SqlCommand(cmdText, conn))
{
    cmd.ExecuteReader();
}
Run Code Online (Sandbox Code Playgroud)