GO 用信号通知 Microsoft® SQL Server™ 实用工具一批 Transact-SQL 语句的结束。语法 GO注释 GO 不是 Transact-SQL 语句;而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。SQL 查询分析器和 osql 及 isql 命令提示实用工具执行 GO 命令的方式不同。有关更多信息,请参见 osql 实用工具、isql 实用工具和 SQL 查询分析器。 GO 命令和Transact-SQL 语句不可在同一行上。但在 GO 命令行中可包含注释。用户必须遵照使用批处理的规则。例如,在批处理中的第一条语句后执行任何存储过程必须包含 EXECUTE 关键字。局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用。
示例 下面的示例创建两个批处理。第一个批处理只包含一条 USE pubs 语句,用于设置数据库上下文。剩下的语句使用了一个局部变量,因此所有的局部变量声明必须在一个批处理中。这一点可通过在最后一条引用此变量的语句之后才使用 GO 命令来做到。USE pubs GO DECLARE @NmbrAuthors int SELECT @NmbrAuthors = COUNT(*) FROM authors PRINT 'The number of authors as of ' + CAST(GETDATE() AS char(20)) + ' is ' + CAST(@NmbrAuthors AS char (10)) GO
再问一下: 一般什么情况下使用osql?osql主要有些什么作用?
osql -stest -Usa -Psa -dhy -q"select * from users"我试了一下,-U -P好像必须要大写,不然老是登录错误登录后直接输入sql语句就行了,前边可以不加-q了 select * from users goexit 退出可以通过odbc,也可以直接输入服务器名-----------------为什么select * from users 后,屏幕出现很多t,显示也不规则???
我来补充一下GO的用法 因为 CREATE VIEW 必须是批处理中的唯一语句,所以需要 GO 命令将 CREATE VIEW 语句与其周围的 USE 和 SELECT 语句隔离。USE pubs GO /* Signals the end of the batch */CREATE VIEW auth_titles AS SELECT * FROM authors GO /* Signals the end of the batch */SELECT * FROM auth_titles GO /* Signals the end of the batch */
补充在 联机帮助 上看到的2各例子:下例说明将几个批处理组合成一个事务。BEGIN TRANSACTION 和 COMMIT 语句分隔事务边界。BEGIN TRANSACTION、USE、CREATE TABLE、SELECT 和 COMMIT 语句都包含在它们各自的单语句批处理中。所有的 INSERT 语句包含在一个批处理中。BEGIN TRANSACTION GO USE pubs GO CREATE TABLE mycompanies ( id_num int IDENTITY(100, 5), company_name nvarchar(100) ) GO INSERT mycompanies (company_name) VALUES ('New Moon Books') INSERT mycompanies (company_name) VALUES ('Binnet & Hardley') INSERT mycompanies (company_name) VALUES ('Algodata Infosystems') INSERT mycompanies (company_name) VALUES ('Five Lakes Publishing') INSERT mycompanies (company_name) VALUES ('Ramona Publishers') INSERT mycompanies (company_name) VALUES ('GGG&G') INSERT mycompanies (company_name) VALUES ('Scootney Books') INSERT mycompanies (company_name) VALUES ('Lucerne Publishing') GO SELECT * FROM mycompanies ORDER BY company_name ASC GO COMMIT GO下列脚本说明两个问题。首先,变量 @MyVar 在第二个批处理中定义而在第三个批处理中引用。而且第二个批处理中有注释的开始但没有结尾。第三个批处理有注释的结尾,但是当 osql 读取 GO 命令时,它将第一个批处理发送到 Microsoft® SQL Server™,由于"/*"没有与之匹配的"*/"而产生语法错误。USE Northwind GO DECLARE @MyVar INT /* Start of the split comment. GO End of the split comment. */ SELECT @MyVar = 29 GO
你在 查询分析器里输两个 sp_help 分开运行都行 但一起运行就不会,因为这是两个存储过程,只要在两个sp_help之间加上 go 就行了.
用信号通知 Microsoft® SQL Server™ 实用工具一批 Transact-SQL 语句的结束。语法
GO注释
GO 不是 Transact-SQL 语句;而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。SQL 查询分析器和 osql 及 isql 命令提示实用工具执行 GO 命令的方式不同。有关更多信息,请参见 osql 实用工具、isql 实用工具和 SQL 查询分析器。 GO 命令和Transact-SQL 语句不可在同一行上。但在 GO 命令行中可包含注释。用户必须遵照使用批处理的规则。例如,在批处理中的第一条语句后执行任何存储过程必须包含 EXECUTE 关键字。局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用。
下面的示例创建两个批处理。第一个批处理只包含一条 USE pubs 语句,用于设置数据库上下文。剩下的语句使用了一个局部变量,因此所有的局部变量声明必须在一个批处理中。这一点可通过在最后一条引用此变量的语句之后才使用 GO 命令来做到。USE pubs
GO
DECLARE @NmbrAuthors int
SELECT @NmbrAuthors = COUNT(*)
FROM authors
PRINT 'The number of authors as of ' +
CAST(GETDATE() AS char(20)) + ' is ' +
CAST(@NmbrAuthors AS char (10))
GO
select * from users
goexit 退出可以通过odbc,也可以直接输入服务器名-----------------为什么select * from users 后,屏幕出现很多t,显示也不规则???
因为 CREATE VIEW 必须是批处理中的唯一语句,所以需要 GO 命令将 CREATE VIEW 语句与其周围的 USE 和 SELECT 语句隔离。USE pubs
GO /* Signals the end of the batch */CREATE VIEW auth_titles
AS
SELECT *
FROM authors
GO /* Signals the end of the batch */SELECT *
FROM auth_titles
GO /* Signals the end of the batch */
GO
USE pubs
GO
CREATE TABLE mycompanies
(
id_num int IDENTITY(100, 5),
company_name nvarchar(100)
)
GO
INSERT mycompanies (company_name)
VALUES ('New Moon Books')
INSERT mycompanies (company_name)
VALUES ('Binnet & Hardley')
INSERT mycompanies (company_name)
VALUES ('Algodata Infosystems')
INSERT mycompanies (company_name)
VALUES ('Five Lakes Publishing')
INSERT mycompanies (company_name)
VALUES ('Ramona Publishers')
INSERT mycompanies (company_name)
VALUES ('GGG&G')
INSERT mycompanies (company_name)
VALUES ('Scootney Books')
INSERT mycompanies (company_name)
VALUES ('Lucerne Publishing')
GO
SELECT *
FROM mycompanies
ORDER BY company_name ASC
GO
COMMIT
GO下列脚本说明两个问题。首先,变量 @MyVar 在第二个批处理中定义而在第三个批处理中引用。而且第二个批处理中有注释的开始但没有结尾。第三个批处理有注释的结尾,但是当 osql 读取 GO 命令时,它将第一个批处理发送到 Microsoft® SQL Server™,由于"/*"没有与之匹配的"*/"而产生语法错误。USE Northwind
GO
DECLARE @MyVar INT
/* Start of the split comment.
GO
End of the split comment. */
SELECT @MyVar = 29
GO