创建表时出错:“数据库中已存在名为...的对象”,但不是具有该名称的对象

时间:2010-03-26 13:08:13

标签: sql sql-server sql-server-2005 tsql

我正在尝试在Microsoft SQL Server 2005(Express)上创建一个表。

当我运行此查询时

USE [QSWeb]
GO

/****** Object:  Table [dbo].[QSW_RFQ_Log]    Script Date: 03/26/2010 08:30:29 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[QSW_RFQ_Log](
    [RFQ_ID] [int] NOT NULL,
    [Action_Time] [datetime] NOT NULL,
    [Quote_ID] [int] NULL,
    [UserName] [nvarchar](256) NOT NULL,
    [Action] [int] NOT NULL,
    [Parameter] [int] NULL,
    [Note] [varchar](255) NULL,
 CONSTRAINT [QSW_RFQ_Log] PRIMARY KEY CLUSTERED 
(
    [RFQ_ID] ASC,
    [Action_Time] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

我收到此错误消息

  

Msg 2714,Level 16,State 4,Line 2   已经有一个名为的对象   数据库中的'QSW_RFQ_Log'。消息   1750年,16级,0国,2号线   不创造约束。见前   错误。

但如果我尝试使用此查询找到有问题的对象:

SELECT *
FROM QSWEB.sys.all_objects
WHERE upper(name) like upper('QSW_RFQ_%') 

我得到了这个

  

(0行(s)受影响)

发生了什么????

3 个答案:

答案 0 :(得分:27)

您正在尝试创建一个与约束名称相同的表(QSW_RFQ_Log)。您的查询找不到对象,因为表创建失败,因此错误后对象不存在。为约束选择一个新名称,它将起作用,例如:

CONSTRAINT [QSW_RFQ_Log_PK] PRIMARY KEY CLUSTERED

答案 1 :(得分:6)

试试这个:

CONSTRAINT [PK_QSW_RFQ_Log] PRIMARY KEY CLUSTERED 
add this    ^^^

您正在尝试添加与表名相同的主键,使PK具有不同的名称。

答案 2 :(得分:4)

您不应将主键约束命名为数据表; - )