0

Say, I just created a database, then created a login and and now I need to assign a user to it. So I do:

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

But the USE line returns this error:

Database 'testdb2' does not exist. Make sure that the name is entered correctly.

4

2 回答 2

4

添加一些GO命令:

向 SQL Server 实用程序发出一批 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 或自特别会话或脚本开始(如果这是第一个 GO)以来输入的所有语句组成。Transact-SQL 语句不能与 GO 命令占用同一行。但是,该行可以包含注释。用户必须遵守批量规则。例如,在批处理中的第一条语句之后执行任何存储过程都必须包含 EXECUTE 关键字。本地(用户定义)变量的范围仅限于批处理,并且不能在 GO 命令后引用。

于 2013-10-23T23:58:33.217 回答
0

您必须在 CREATE DATABASE 语句之后使用 GO,并且在 CREATE LOGIN 语句之后也必须使用。
GO 用作批次分隔符。如果您想使用其他东西作为批处理分隔符而不是 GO,则可以更改此设置。转到工具 -> 选项 -> 查询执行,然后查看批处理分隔符部分。
GO 也可以与 int 参数一起使用,例如:

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

这会将值插入#tmp 10 次。

于 2013-10-24T00:07:57.927 回答