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 - 错误 - 数据库中已有一个名为“流派”的对象的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2012 中使用 SP_AddRole 添加角色时,数据库中已有一个名为“Test”的对象

Redis或SQL Server存储SMS确认数据

SQL Query 中用于查找空记录的查询问题

EF 迁移 - 数据库中已有一个名为“”的对象

Oracle SQL:每个错误代码的错误计数错误

如何使用 Google App 签名为 Sms Retriever 生成 11 个字符的哈希密钥