t-SQL USE关键字问题

时间:2013-10-23 23:56:10

标签: sql sql-server sql-server-2008 tsql

说,我刚刚创建了一个数据库,然后创建了一个登录,现在我需要为其分配一个用户。所以我这样做:

CREATE DATABASE [testdb2] COLLATE SQL_Latin1_General_CP1_CI_AS;
CREATE LOGIN testusr1 WITH PASSWORD = 'mystrongpassword';
USE [testdb2];
CREATE USER testusr1 FOR LOGIN testusr1;

USE行会返回此错误:

  

数据库'testdb2'不存在。确保输入名称   正确。

2 个答案:

答案 0 :(得分:4)

添加一些GO命令:

  

向SQL发出一批Transact-SQL语句的结束信号   服务器实用程序。

例如,

CREATE DATABASE [testdb2] COLLATE SQL_Latin1_General_CP1_CI_AS;
GO
CREATE LOGIN testusr1 WITH PASSWORD = 'mystrongpassword';
GO
USE [testdb2];
GO
CREATE USER testusr1 FOR LOGIN testusr1;
  

GO不是Transact-SQL语句;这是一个被公认的命令   sqlcmd和osql实用程序以及SQL Server Management Studio代码   编辑。 SQL Server实用程序将GO解释为它们应该的信号   将当前批处理的Transact-SQL语句发送到   SQL Server。当前批次的陈述由所有人组成   自上次GO以来或自ad hoc开始以来输入的语句   会话或脚本,如果这是第一个GO。 Transact-SQL语句   不能占用与GO命令相同的行。但是,这条线可以   包含评论。用户必须遵守批次规则。对于   例如,在第一个语句之后执行存储过程   批处理中必须包含EXECUTE关键字。当地的范围   (用户定义的)变量仅限于批次,而不能   在GO命令之后引用。

答案 1 :(得分:0)

您必须在CREATE DATABASE语句之后以及CREATE LOGIN语句之后使用GO。
GO用作批处理分隔符。如果要将其他内容用作批处理分隔符而不是GO,则可以更改此设置。转到工具 - >选项 - >查询执行,请参阅批处理分隔符部分。
GO也可以与int参数一起使用,例如:

INSERT INTO #tmp
SELECT 1, 2, 3
GO 10

将值插入#tmp 10次。