Ошибка при создании таблицы: "В базе уже есть объект с именем..., но не объект с этим именем
Я пытаюсь создать таблицу на 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; -)