【问题标题】:there is already an object named '' in the database数据库中已经有一个名为 '' 的对象
【发布时间】:2019-05-12 13:06:15
【问题描述】:

这是我的代码:

CREATE TABLE supplier  -- creating table supplier
(
  supplierID INT NOT NULL IDENTITY,
  supplierName VARCHAR(30) NOT NULL,
  suppplierNo VARCHAR(10) NOT NULL,
  supplierEmail VARCHAR(30) NOT NULL,
  CONSTRAINT PK_supplierID PRIMARY KEY(supplierID)
)

GO

我得到了错误:

消息 2714,第 16 级,状态 6,第 34 行

数据库中已经有一个名为“供应商”的对象。

有什么帮助吗?谢谢!

【问题讨论】:

  • 好吧,如果您想要一个新版本,请删除该表。或使用alter table。您不理解消息的哪一部分?
  • 现有对象可能不一定是表格,但无论如何,消息似乎很清楚。你在问我们什么?
  • 错误是关于数据库中存在同名供应商的表对象,因此您可以删除并创建它
  • 只是一个提示,避免在整个字段中添加supplier。
  • @GordonLinoff,如果我只是创建表,我不明白消息是如何出现的。我对 SQL 还很陌生,请记住这一点^^

标签: sql sql-server tsql


【解决方案1】:

需要先检查表是否存在

IF OBJECT_ID('dbo.supplier', 'U') IS NOT NULL 
  DROP TABLE dbo.supplier;
CREATE TABLE dbo.supplier
(
    supplierID INT NOT NULL IDENTITY,
    supplierName VARCHAR(30) NOT NULL,
    suppplierNo VARCHAR(10) NOT NULL,
    supplierEmail VARCHAR(30) NOT NULL,
    CONSTRAINT PK_supplierID PRIMARY KEY(supplierID)
)
GO

如果您使用的是 2016+,则可以使用

DROP TABLE IF EXISTS dbo.supplier;
CREATE TABLE dbo.supplier
(
    supplierID INT NOT NULL IDENTITY,
    supplierName VARCHAR(30) NOT NULL,
    suppplierNo VARCHAR(10) NOT NULL,
    supplierEmail VARCHAR(30) NOT NULL,
    CONSTRAINT PK_supplierID PRIMARY KEY(supplierID)
)
GO

【讨论】:

  • 这里盲目地删除可能包含数据的现有表可能不是最好的解决方案
  • 如果现有对象不是表格,也无济于事。我认为盲目地提供这个建议是相当危险的。
【解决方案2】:

请试试这个代码。

IF EXISTS(SELECT 1 FROM sys.tables WHERE name = 'supplier') 

DROP TABLE dbo.supplier;
CREATE TABLE dbo.supplier
(
    supplierID INT NOT NULL IDENTITY,
    supplierName VARCHAR(30) NOT NULL,
    suppplierNo VARCHAR(10) NOT NULL,
    supplierEmail VARCHAR(30) NOT NULL,
    CONSTRAINT PK_supplierID PRIMARY KEY(supplierID)
)
GO

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 2016-04-08
    • 2014-08-01
    • 2010-11-12
    • 2021-05-10
    • 2013-10-21
    • 1970-01-01
    • 2020-10-19
    • 2016-06-22
    相关资源
    最近更新 更多