在创建新数据库后,数据库中已经存在一个名为XXXX的对象。

3

我有一个SQL文件,正在在SQL Server实例上执行,其中包含数据库的模式。该文件创建一个全新的数据库(也就是说,此名称的数据库在此服务器上不存在):

CREATE DATABASE PROJECT;

并开始建立联系:
CREATE TABLE Courses (
  CourseID INT NOT NULL PRIMARY KEY,
  Name VARCHAR(64) NOT NULL UNIQUE,
  Code CHAR(4) NOT NULL UNIQUE
);

...

这是SQL Server直接告诉我的:

Msg 2714, Level 16, State 6, Line 3
There is already an object named 'Courses' in the database.

有什么想法,为什么SQL Server告诉我已经存在一个名称为“Courses”的关系,而实际上并不存在?
谢谢您的时间。

1
创建完数据库后,请尝试执行此查询 USE PROJECT;,然后再次运行 DDL。 - John Woo
哦哦...它正在主数据库中进行...明白了! - Oliver Spryn
创建了PROJECT数据库并执行了USE PROJECT;之后,我遇到了一个缺点:Msg 911, Level 16, State 1, Line 3 Database 'PROJECT' does not exist. Make sure that the name is entered correctly. - Oliver Spryn
2
在SSMS中,在创建数据库和使用语句之间需要一个GO - Adam Wenger
3个回答

5

如果您正在使用PROJECT,请检查数据库。

CREATE DATABASE PROJECT
GO

USE PROJECT
GO

CREATE TABLE Courses 
(
  CourseID INT NOT NULL PRIMARY KEY,
  Name VARCHAR(64) NOT NULL UNIQUE,
  Code CHAR(4) NOT NULL UNIQUE
)
GO

1
我对特定供应商的 T-SQL 不是很了解。你能解释一下在这种情况下 GO 是什么意思吗? - Oliver Spryn
2
在mysql中,“GO”与“;”不是同一回事。Go用于分隔命令批次,而“;”则用于结束语句(无论是在mysql还是T-SQL中),许多语句可以成为一个批次的一部分。http://msdn.microsoft.com/en-us/library/ms188037.aspx - Code Magician
@M_M 嗯...我不知道在TSQL中分号;是可选的!谢谢! - Oliver Spryn
通常情况下不需要,除非使用公共表达式。WITH必须是批处理中的第一条语句,或者在其前面加上; - Code Magician

3
你可能缺少 USE PROJECT 语句,因此尝试在 master 数据库中创建 Courses 表而不是在 PROJECT 数据库中创建。

0

可能有点冒险,但尝试使用:

Use project;
CREATE TABLE Courses....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接