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
该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)