Ошибка при создании таблицы: "В базе уже есть объект с именем..., но не объект с этим именем

Я пытаюсь создать таблицу на 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, уровень 16, состояние 4, строка 2 Уже существует объект с именем 'QSW_RFQ_Log' в базе данных. Msg 1750, уровень 16, состояние 0, строка 2 Может ли не создавать ограничения. См. Предыдущие ошибки.

но если я попытаюсь найти объект, о котором идет речь, используя этот запрос:

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

Я получил это

(затронуты 0 строк (строк))

Что происходит?

Ответ 1

Вы пытаетесь создать таблицу с тем же именем, что и ограничение (QSW_RFQ_Log). Ваш запрос не находит объект, потому что создание таблицы не выполняется, поэтому объект не существует после ошибки. Выберите новое имя для ограничения, и оно будет работать, например:

CONSTRAINT [QSW_RFQ_Log_PK] PRIMARY KEY CLUSTERED

Ответ 2

попробуйте следующее:

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

вы пытаетесь добавить основной ключ с тем же именем, что и таблица, сделать PK другим именем.

Ответ 3

Вы не должны указывать ограничение первичного ключа, например, ваш datatable; -)