SQL SMS - 错误 - 数据库中已有一个名为“流派”的对象
Posted
技术标签:
【中文标题】SQL SMS - 错误 - 数据库中已有一个名为“流派”的对象【英文标题】:SQL SMS - Error - There is already an object named "genre" in the database 【发布时间】:2011-11-04 12:00:38 【问题描述】:我正在尝试创建一个假设的视频商店数据库,每次执行此查询时都会出现此错误消息:
DROP DATABASE videostore
CREATE DATABASE videostore
CREATE TABLE genre
(
genre_id INT NOT NULL PRIMARY KEY IDENTITY,
genre_name VARCHAR(15) NOT NULL
);
CREATE TABLE classification
(
rating VARCHAR(2) NOT NULL CONSTRAINT classification_pk PRIMARY KEY,
description VARCHAR(100) NOT NULL,
minimum_age INT NULL,
);
CREATE TABLE format
(
format_id INT NOT NULL CONSTRAINT format_pk PRIMARY KEY IDENTITY,
format_name VARCHAR(8) NOT NULL,
purchase_cost FLOAT NOT NULL
);
CREATE TABLE rental_cost
(
rental_cost_id INT NOT NULL CONSTRAINT rental_cost_pk PRIMARY KEY IDENTITY,
rental_name VARCHAR(15) NOT NULL,
rental_cost FLOAT NOT NULL,
rental_days TINYINT NOT NULL
);
CREATE TABLE customer
(
customer_id INT NOT NULL CONSTRAINT customer_pk PRIMARY KEY IDENTITY,
first_name VARCHAR(20) NOT NULL,
surname VARCHAR(20) NOT NULL,
dob DATETIME NOT NULL,
home_address VARCHAR(50) NOT NULL,
contact_number VARCHAR(10) NOT NULL,
referrer_id INT NULL FOREIGN KEY REFERENCES customer(customer_id),
);
CREATE TABLE movie
(
movie_id INT NOT NULL CONSTRAINT movie_pk PRIMARY KEY IDENTITY,
movie_name VARCHAR(40) NOT NULL,
year SMALLINT NOT NULL,
duration SMALLINT NULL,
descrip VARCHAR(120) NULL,
classification VARCHAR(2) NOT NULL FOREIGN KEY REFERENCES classification(rating),
rental_cost_id INT NOT NULL FOREIGN KEY REFERENCES rental_cost(rental_cost_id),
);
CREATE TABLE copy
(
copy_id INT NOT NULL CONSTRAINT copy_pk PRIMARY KEY IDENTITY,
movie_id INT NOT NULL FOREIGN KEY REFERENCES movie(movie_id),
format_id INT NOT NULL FOREIGN KEY REFERENCES format(format_id),
);
CREATE TABLE rental
(
rental_id INT NOT NULL CONSTRAINT rental_pk PRIMARY KEY IDENTITY,
copy_id INT NOT NULL FOREIGN KEY REFERENCES copy(copy_id),
customer_id INT NOT NULL FOREIGN KEY REFERENCES customer(customer_id),
rental_date DATETIME NOT NULL,
return_date DATETIME NULL
);
CREATE TABLE genre_movie
(
genre_id INT NOT NULL FOREIGN KEY REFERENCES genre(genre_id),
movie_id INT NOT NULL FOREIGN KEY REFERENCES movie(movie_id),
CONSTRAINT genre_movie_pk PRIMARY KEY (genre_id, movie_id)
);
(抱歉,它的格式不适合轻松阅读脚本,我真的不知道该怎么做。)
基本上,当我执行 SQL 脚本时,它会告诉我对象“流派”已经存在,但我在代码中的其他任何地方都看不到它。 而且该表不应该已经存在,因为每次执行脚本时我都会删除数据库对吗?
旁注-如果有更好的方法可以使数据库仅在存在时才被删除,请也帮助我。
欣赏它。
【问题讨论】:
你可以使用DROP DATABASE IF EXISTS videostore;
【参考方案1】:
我认为您需要在CREATE DATABASE videostore
之后添加USE videostore
。否则,您将在当前所在的任何数据库中创建表。
【讨论】:
等一下,我需要能够多次执行这个脚本,如果我第二次运行它会说:“无法删除数据库“videostore”,因为它当前正在使用中。”我该如何解决这个问题? @Owen,在删除数据库之前,请确保您当前的数据库不是videostore
。假设您有一个数据库 master
,您可以添加 use master;
作为脚本中的第一条语句。【参考方案2】:
我认为您是在 master
数据库的上下文中执行此操作的。如果你检查它,你可能会看到你所有的表实际上都在master
。
将第一部分改为:
DROP DATABASE videostore
CREATE DATABASE videostore
USE videostore
CREATE TABLE genre
【讨论】:
够简单的。谢谢大家:) 等一下,我需要能够多次执行这个脚本,如果我第二次运行它会说:“无法删除数据库“videostore”,因为它当前正在使用中。”我该如何解决这个问题? 你有另一个窗口在运行它吗?【参考方案3】:一般最好在需要的时候执行sql语句——试试:
DROP DATABASE videostore
GO
CREATE DATABASE videostore
GO
USE videostore
CREATE TABLE genre
(
genre_id INT NOT NULL PRIMARY KEY IDENTITY,
genre_name VARCHAR(15) NOT NULL
);
GO
等等
【讨论】:
以上是关于SQL SMS - 错误 - 数据库中已有一个名为“流派”的对象的主要内容,如果未能解决你的问题,请参考以下文章